Je vois que les gens utilisent anypour 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 anypour 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 inqui 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 Truesi une liste contient un certain nombre d'occurrences d'un élément, ou Falsesi 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 indexrenverra -1si 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 ifdé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
indexméthode ne renvoie pas -1 si l'élément n'est pas présent, elle lève une ValueErrorexception.