0
votes

Comment trouver chaque occurrence d'un élément dans une liste et imprimer son numéro d'index d'occurrences?

Je veux pouvoir parcourir une liste Python et imprimer chaque numéro d'index d'occurrences. Exemple: xxx

Lorsque j'essaie ce code, cela ne me donne le premier numéro d'index pour le t mais je veux imprimer chaque numéro d'index que le t a été utilisé dans.


5 commentaires

vous devriez faire boucle dans la liste vous-même et enregistrer les indices


Connaissez-vous sur énumérer (a) et compréhensions de liste?


J'ai entendu parler de énumérer () , mais je ne savais pas comment l'utiliser de cette manière.


Coderdude: Bien sûr. Chaque fois que vous vous trouvez écrivez pour i in gamme (len (quelque chose)) C'est toujours une odeur de code pour énumérer (quelque chose) . Et comme cela évite avoir besoin d'une boucle, il suggère une compréhension de la liste (éventuellement avec une condition).


Ne voulez-vous que trouver des occurrences de l'élément 'T' (comme votre code implique) ou tous les éléments de la liste (comme votre titre implique)? Ce dernier est plus généralisé pour le reste d'entre nous. Pouvez-vous réparer votre titre ou votre code?


4 Réponses :


0
votes

Oui, vous pouvez le faire avec énumérer xxx


1 commentaires

Cela fonctionne certainement, mais l'utilisation d'indices est plus verbeuse et légèrement plus lente que le déballage de Tuple, comme les utilisations de la réponse de Tomothy32.



2
votes

Vous pouvez utiliser une compréhension de liste avec énumérer : xxx

intérieur de la liste de compréhension, i est l'index actuel et < code> x est la valeur à cet index.


5 commentaires

Vous voulez sûrement dire [(i, x) pour i, x en énumérant (a)] ? Sinon, vous ne comparez que pour x == 't' , pas pour tous les éléments.


@SMCI Désolé, je suis assez confus quant à ce que vous dites. Comment ce que je n'ai pas trouvé tous les indices? Quelle est la sortie supposée être?


Ce que vous avez seulement trouvé les occurrences de l'article 'T'. Pas de tous les articles. La question indiquait "examiner à travers une liste et imprimer chaque occurrence" numéro d'index ".


@SMCI La façon dont j'interprète le titre est de rechercher toutes les occurrences d'un seul élément. Rien dans la question suggère "tous les articles". Bien sûr, si vous pouvez donner une certaine élaboration de savoir où exactement OP spécifié "tous les articles" plutôt qu'un seul élément, qui serait apprécié.


Il n'y a pas besoin de sarcasme laborieux. Le titre est clairement en conflit avec la première ligne qui dit "look à travers la liste et imprimer chaque occurrence ' numéro d'index" , comme je l'ai dit. Étant donné le choix entre l'interpréter de manière à ne pas donner une ressource très réutilisable (par exemple pour l'article 'T'), nous devrions choisir la manière la plus générale ("Tous les articles").



0
votes
>>> get_indices(a, "t")
[0, 3]

5 commentaires

C'est ce que énumérable () est pour. Pas besoin de boucles. Liste des compréhensions tout le chemin. Nettoyant, plus court, plus pythonique.


Mais une bonne solution de travail néanmoins. Je préfère personnellement la méthode de boucle.


@PikachuthepurpleWizard: Pourquoi? C'est une solution non pythonique clunky, obscurcie et non pythonique; moins efficace et plus lent. C'est le genre de chose qu'un codeur Java génère. Cela ne montre aucune compréhension de l'idiome Python. pour i in gamme (len (liste)) est toujours une odeur de code pour énumérer (liste)


@SMCI Eh bien, je suis un codeur Java. Je suis habitué à beaucoup de boucles. Mais mon point est, même s'il n'utilise pas une méthode d'utilité intégrée, cela fonctionne toujours parfaitement.


Veuillez ne pas ombre des noms intégrés tels que Liste . Il ne fera rien de mal dans votre fonction get_indices , mais en général, cela peut conduire à des erreurs avec des messages d'erreur mystérieux si le code suivant tente d'appeler Liste . Et nous ne voulons pas que de nouveaux codeurs lisent alors des réponses ramassant de telles mauvaises habitudes.



1
votes

avec énumérer code> à l'intérieur compréhension de la liste forte> pour t strud>, xxx pré>

Sortie: fort> p> xxx pré>

avec boucle pour tous les éléments, p> xxx pré>

sortie: strong> p >

 {'s': [2], 'e': [1], 't': [0, 3]}


1 commentaires

Votre 1ère solution est bonne. Votre 2e solution doit être écrite sans la double boucle inefficace et ne doit pas calculer résultat ['T'] deux fois.