95 votes

Trouver toutes les positions d'index dans la liste sur la base d'une chaîne partielle à l'intérieur d'un élément de la liste.

mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]

J'ai besoin de la position de l'index de tous les éléments qui contiennent 'aa' . J'ai du mal à combiner enumerate() avec une correspondance partielle des chaînes de caractères. Je ne suis même pas sûr que je doive utiliser enumerate.

J'ai juste besoin de retourner les positions de l'index : 0,2,5

157voto

StoryTeller Points 6139

Vous pouvez utiliser enumerate à l'intérieur d'un liste-compréhension :

indices = [i for i, s in enumerate(mylist) if 'aa' in s]

23voto

pemistahl Points 2413

Votre idée d'utiliser enumerate() était correcte.

indices = []
for i, elem in enumerate(mylist):
    if 'aa' in elem:
        indices.append(i)

Ou encore, sous forme de compréhension de liste :

indices = [i for i, elem in enumerate(mylist) if 'aa' in elem]

13voto

Haidro Points 24336

Sans enumerate() :

>>> mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]
>>> l = [mylist.index(i) for i in mylist if 'aa' in i]
>>> l
[0, 2, 5]

1voto

Scotty1- Points 1292

Sur la base de cette réponse, je voudrais montrer comment "sortie prématurée" l'itération une fois que le premier élément contenant la sous-chaîne aa est rencontrée. Cela ne renvoie que le première position .

import itertools
first_idx = len(tuple(itertools.takewhile(lambda x: "aa" not in x, mylist)))

Cela devrait être beaucoup plus performant que de boucler sur toute la liste lorsque la liste est longue puisque takewhile s'arrêtera une fois que la condition est False pour la première fois.

Je sais que la question demandait tous mais comme de nombreux utilisateurs tomberont sur cette question lorsqu'ils chercheront la position de l'UE, ils ne pourront pas la trouver. premièrement sous-chaîne, je vais quand même ajouter cette réponse.

-4voto

user11167492 Points 17
spell_list = ["Tuesday", "Wednesday", "February", "November", "Annual", "Calendar", "Solstice"]

index=spell_list.index("Annual")
print(index)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X