Pour ce qui est de votre première question : ce code est tout à fait correct et devrait fonctionner si item
est égal à l'un des éléments contenus dans myList
. Peut-être que vous essayez de trouver une chaîne qui n'est pas exactement correspond à l'un des éléments ou peut-être utilisez-vous une valeur flottante qui souffre d'imprécision.
Quant à votre deuxième question : Il y a en fait plusieurs façons de "trouver" des choses dans les listes.
Vérifier si quelque chose est à l'intérieur
C'est le cas d'utilisation que vous décrivez : Vérifier si quelque chose est à l'intérieur d'une liste ou non. Comme vous le savez, vous pouvez utiliser la fonction in
opérateur pour cela :
3 in [1, 2, 3] # => True
Filtrer une collection
C'est-à-dire trouver tous les éléments d'une séquence qui répondent à une certaine condition. Vous pouvez utiliser la compréhension de liste ou les expressions de générateur pour cela :
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
Ce dernier renverra un générateur que vous pouvez imaginer comme une sorte de liste paresseuse qui ne sera construite que lorsque vous l'aurez parcourue. Au fait, la première est exactement équivalente à
matches = filter(fulfills_some_condition, lst)
dans Python 2. Vous pouvez voir ici les fonctions d'ordre supérieur à l'œuvre. En Python 3, filter
ne retourne pas une liste, mais un objet de type générateur.
Trouver la première occurrence
Si vous ne voulez que la première chose qui correspond à une condition (mais que vous ne savez pas encore laquelle), vous pouvez utiliser une boucle for (en utilisant éventuellement la fonction else
également, ce qui n'est pas vraiment connu). Vous pouvez également utiliser
next(x for x in lst if ...)
qui renvoie la première correspondance ou lève un StopIteration
si aucun n'est trouvé. Alternativement, vous pouvez utiliser
next((x for x in lst if ...), [default value])
Trouver l'emplacement d'un élément
Pour les listes, il y a aussi le index
qui peut parfois être utile si vous voulez connaître où un certain élément est dans la liste :
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Cependant, notez que si vous avez des doublons, .index
renvoie toujours l'indice le plus bas : ......
[1,2,3,2].index(2) # => 1
S'il y a des doublons et que vous voulez tous les index, vous pouvez utiliser enumerate()
à la place :
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
3 votes
C'est tout à fait correct et devrait fonctionner si item est égal à l'un des éléments contenus dans
myList
.1 votes
Vous voulez dire que c'est la bonne façon de faire les choses ? dans mes différents essais, il y avait peut-être des espaces, et des retours à la ligne qui s'entremêlaient... je voulais juste être sûr que c'est la bonne façon d'implémenter "find in list" (en général)