index suffira de donner la première occurrence. Est-il une astuce qui renvoie tous les indices dans une liste
Réponses
Trop de publicités?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.
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).