598 votes

Comment faire pour trouver toutes les occurrences d'un élément dans une liste?

index suffira de donner la première occurrence. Est-il une astuce qui renvoie tous les indices dans une liste

866voto

Sven Marnach Points 133943

Vous pouvez utiliser une liste de compréhension:

indices = [i for i, x in enumerate(my_list) if x == "whatever"]

175voto

JoshAdel Points 15911

Tandis que pas une solution pour les listes directement, numpy brille vraiment pour ce genre de chose:

import numpy as np
values = np.array([1,2,3,1,2,4,5,6,3,2,1])
searchval = 3
ii = np.where(values == searchval)[0]

retourne:

ii ==>array([2, 8])

Cela peut être beaucoup plus importante pour les listes (des tableaux) avec un grand nombre d'éléments vs certains des autres solutions.

41voto

Paulo Almeida Points 2355

Une solution à l'aide d' list.index:

def indices(lst, element):
    result = []
    offset = -1
    while True:
        try:
            offset = lst.index(element, offset+1)
        except ValueError:
            return result
        result.append(offset)

C'est beaucoup plus rapide que la compréhension de liste avec enumerate, pour les grandes listes. Il est aussi beaucoup plus lent que l' numpy solution si vous avez déjà le tableau, sinon le coût de la conversion de l'emporte sur le gain de vitesse (testé sur des listes d'entiers avec 100, 1000 et 10000 éléments).

28voto

NPE Points 169956

Comment à ce sujet:

In [1]: l=[1,2,3,4,3,2,5,6,7]

In [2]: [i for i,val in enumerate(l) if val==3]
Out[2]: [2, 4]

12voto

phihag Points 89765
occurrences = lambda s, lst: (i for i,e in enumerate(lst) if e == s)
list(occurrences(1, [1,2,3,1])) # = [0, 3]

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