Je vois que les gens utilisent any
pour rassembler une autre liste pour voir si un élément existe dans une liste, mais existe-t-il un moyen rapide de le faire ?:
if list.contains(myItem):
# do something
Je vois que les gens utilisent any
pour rassembler une autre liste pour voir si un élément existe dans une liste, mais existe-t-il un moyen rapide de le faire ?:
if list.contains(myItem):
# do something
Réponses:
Vous pouvez utiliser cette syntaxe:
if myItem in list:
# do something
Aussi, opérateur inverse:
if myItem not in list:
# do something
Cela fonctionne très bien pour les listes, les tuples, les ensembles et les dict (vérifier les clés).
Notez qu'il s'agit d'une opération O (n) dans les listes et les tuples, mais une opération O (1) dans les ensembles et les dict.
o='--skip'; o in ("--skip-ias"); # returns True !
("--skip-ias")
n'est pas un tuple, mais une chaîne (les parenthèses ne font rien, tout comme (1)
un entier). Si vous voulez un tuple, vous devez ajouter une virgule après l'élément unique: ("--skip-ias",)
(ou (1,)
).
En plus de ce que d'autres ont dit, vous pouvez également être intéressé de savoir que ce in
qui est, c'est d'appeler la list.__contains__
méthode, que vous pouvez définir sur n'importe quelle classe que vous écrivez et peut être extrêmement pratique pour utiliser python dans toute son étendue.
Une utilisation stupide peut être:
>>> class ContainsEverything:
def __init__(self):
return None
def __contains__(self, *elem, **k):
return True
>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>
J'ai récemment créé cette doublure pour savoir True
si une liste contient un certain nombre d'occurrences d'un élément, ou False
si elle ne contient aucune occurrence ou rien du tout. L'utilisation next(...)
donne à ceci une valeur de retour par défaut ( False
) et signifie qu'il devrait fonctionner beaucoup plus rapidement que l'exécution de la compréhension de la liste entière.
list_does_contain = next((True for item in list_to_test if item == test_item), False)
any(item == test_item for item in list_to_test)
fonctionnerait aussi, je pense?
La méthode list index
renverra -1
si l'élément n'est pas présent et renverra l'index de l'élément dans la liste s'il est présent. Dans une if
déclaration, vous pouvez également effectuer les opérations suivantes:
if myItem in list:
#do things
Vous pouvez également vérifier si un élément ne figure pas dans une liste avec l'instruction if suivante:
if myItem not in list:
#do things
index
méthode ne renvoie pas -1 si l'élément n'est pas présent, elle lève une ValueError
exception.