196 votes

Python : trouver un élément dans une liste

Quelle est une bonne façon de trouver l'indice d'un élément dans une liste en Python ?
Notez que la liste peut ne pas être triée.

Existe-t-il un moyen de spécifier l'opérateur de comparaison à utiliser ?

1 votes

Je peux désélectionner cette question comme étant dupliquée, les questions et réponses ne gèrent pas le cas des instances de classe qui correspondent à un critère.

0 votes

De même, trouver l'index d'un élément dans une liste n'est pas la même chose que trouver l'élément dans une liste.

284voto

bigmattyh Points 9167

De Plongez dans Python :

>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5

17 votes

Mais ce code donne une erreur lorsque l'élément n'est pas dans la liste. Dans le contexte de l'exemple actuel, si je recherche 'trois' (c.-à-d. : li.index('trois')) donne une erreur.

11 votes

Vous pouvez attraper l'erreur pour détecter quand quelque chose n'est pas dans la liste. try: li.index("three") except ValueError: found = false

1 votes

Si vous voulez vraiment trouver l'index, vérifiez d'abord l'élément dans le tableau si c'est vrai, alors faites seulement => li.index("exemple")

162voto

Eduardo Points 628

Si vous voulez simplement savoir si un élément est contenu dans la liste ou non :

>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> 'example' in li
True
>>> 'damn' in li
False

66voto

Brian R. Bondy Points 141769

Le meilleur moyen est probablement d'utiliser le méthode de liste .index .

Pour les objets de la liste, vous pouvez faire quelque chose comme :

def __eq__(self, other):
    return self.Value == other.Value

avec tout traitement spécial dont vous avez besoin.

Vous pouvez également utiliser une instruction for/in avec enumerate(arr)

Exemple de recherche de l'indice d'un élément dont la valeur est > 100.

for index, item in enumerate(arr):
    if item > 100:
        return index, item

Source :

48voto

ThomasH Points 6597

Voici une autre façon d'utiliser la compréhension de liste (certaines personnes pourraient trouver cela discutable). Elle est très abordable pour des tests simples, par exemple des comparaisons sur des attributs d'objets (dont j'ai souvent besoin) :

el = [x for x in mylist if x.attr == "foo"][0]

Bien sûr, cela suppose l'existence (et, en fait, l'unicité) d'un élément approprié dans la liste.

9 votes

el = [x for x in mylist if x.attr == "foo"] if el: do something with el[0] résout le problème de l'existence

5 votes

el = next((x for x in mylist if x.attr == "foo"), None) si vous voulez recevoir une valeur même si elle n'existe pas.

18voto

En supposant que vous voulez trouver une valeur dans un tableau numpy, je suppose que quelque chose comme ça pourrait fonctionner :

Numpy.where(arr=="value")[0]

1 votes

Ne fonctionne pas pour les tableaux multidimensionnels si l'on recherche une ligne spécifique, par ex. arr = np.array([[0,0,1],[0,1,0],[1,0,0]]) si vous le faites np.where(arr == [0,1,0]) il ne donne pas le bon résultat

0 votes

@ierdna, n'avez-vous pas besoin de fournir axis=0 ou axis=1 ?

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