Ich sehe, dass Leute verwenden any, um eine andere Liste zu sammeln, um zu sehen, ob ein Element in einer Liste vorhanden ist, aber gibt es eine schnelle Möglichkeit, dies einfach zu tun?:
Ihre Frage impliziert, dass Sie nur an einer Liste mit Elementen interessiert sind , nicht an einer Liste mit Unterlisten. / tuple / set / frozenset / ...?
smci
Antworten:
873
Sie können diese Syntax verwenden:
if myItem in list:# do something
Auch inverser Operator:
if myItem notin list:# do something
Es funktioniert gut für Listen, Tupel, Sets und Diktate (Check Keys).
Beachten Sie, dass dies eine O (n) -Operation in Listen und Tupeln ist, aber eine O (1) -Operation in Mengen und Diktaten.
Wird bei einer Liste mit Numpy-Arrays nach Numpy-Instanzen oder Werten innerhalb der Numpy-Instanzen gesucht?
Daniel Möller
In acht nehmen ! Dies passt, obwohl dies sehr wahrscheinlich das ist, was Sie nicht erwartet haben:o='--skip'; o in ("--skip-ias"); # returns True !
Alex F
3
@AlexF: Das stimmt überein, weil ("--skip-ias")es kein Tupel ist, sondern eine Zeichenfolge (die Klammern tun nichts, genauso wie (1)es nur eine ganze Zahl ist). Wenn Sie ein 1-Tupel möchten, müssen Sie nach dem einzelnen Element ein Komma einfügen: ("--skip-ias",)(oder (1,)).
Blckknght
Beachten Sie, dass beim Vergleichen von Zeichen die Groß- und Kleinschreibung nicht berücksichtigt wird.
Tillson
65
Zusätzlich zu dem, was andere gesagt haben, könnte es Sie auch interessieren, zu wissen, dass indie list.__contains__Methode aufgerufen wird, dass Sie sie für jede Klasse definieren können, die Sie schreiben, und dass es äußerst praktisch sein kann, Python in vollem Umfang zu verwenden.
Eine dumme Verwendung kann sein:
>>>classContainsEverything:def __init__(self):returnNonedef __contains__(self,*elem,**k):returnTrue>>> a =ContainsEverything()>>>3in a
True>>> a in a
True>>>Falsein a
True>>>Falsenotin a
False>>>
Ich habe mir kürzlich diesen einen Liner ausgedacht, um herauszufinden, Trueob eine Liste eine beliebige Anzahl von Vorkommen eines Elements Falseenthält oder ob sie keine Vorkommen oder gar nichts enthält. Die Verwendung next(...)gibt diesem einen Standardrückgabewert ( False) und bedeutet, dass er erheblich schneller ausgeführt werden sollte als das gesamte Listenverständnis.
list_does_contain = next((True for item in list_to_test if item == test_item), False)
In meinem Fall habe ich eine Liste von Objekten namens Kategorie und muss sie nur für die Eigenschaft Link testen, damit diese Lösung in meinem Fall besser passt. Danke
Rodrigorf
3
any(item == test_item for item in list_to_test)würde auch funktionieren, denke ich?
Jemand
3
Die Listenmethode indexgibt zurück, -1wenn das Element nicht vorhanden ist, und gibt den Index des Elements in der Liste zurück, wenn es vorhanden ist. Alternativ können Sie in einer ifAnweisung Folgendes tun:
if myItem in list:#do things
Sie können auch mit der folgenden if-Anweisung überprüfen, ob ein Element nicht in einer Liste enthalten ist:
Antworten:
Sie können diese Syntax verwenden:
Auch inverser Operator:
Es funktioniert gut für Listen, Tupel, Sets und Diktate (Check Keys).
Beachten Sie, dass dies eine O (n) -Operation in Listen und Tupeln ist, aber eine O (1) -Operation in Mengen und Diktaten.
quelle
o='--skip'; o in ("--skip-ias"); # returns True !
("--skip-ias")
es kein Tupel ist, sondern eine Zeichenfolge (die Klammern tun nichts, genauso wie(1)
es nur eine ganze Zahl ist). Wenn Sie ein 1-Tupel möchten, müssen Sie nach dem einzelnen Element ein Komma einfügen:("--skip-ias",)
(oder(1,)
).Zusätzlich zu dem, was andere gesagt haben, könnte es Sie auch interessieren, zu wissen, dass
in
dielist.__contains__
Methode aufgerufen wird, dass Sie sie für jede Klasse definieren können, die Sie schreiben, und dass es äußerst praktisch sein kann, Python in vollem Umfang zu verwenden.Eine dumme Verwendung kann sein:
quelle
Ich habe mir kürzlich diesen einen Liner ausgedacht, um herauszufinden,
True
ob eine Liste eine beliebige Anzahl von Vorkommen eines ElementsFalse
enthält oder ob sie keine Vorkommen oder gar nichts enthält. Die Verwendungnext(...)
gibt diesem einen Standardrückgabewert (False
) und bedeutet, dass er erheblich schneller ausgeführt werden sollte als das gesamte Listenverständnis.list_does_contain = next((True for item in list_to_test if item == test_item), False)
quelle
any(item == test_item for item in list_to_test)
würde auch funktionieren, denke ich?Die Listenmethode
index
gibt zurück,-1
wenn das Element nicht vorhanden ist, und gibt den Index des Elements in der Liste zurück, wenn es vorhanden ist. Alternativ können Sie in einerif
Anweisung Folgendes tun:Sie können auch mit der folgenden if-Anweisung überprüfen, ob ein Element nicht in einer Liste enthalten ist:
quelle
index
Methode gibt -1 nicht zurück, wenn das Element nicht vorhanden ist, sondern löst eineValueError
Ausnahme aus.