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?:
if list.contains(myItem):
# do something
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?:
if list.contains(myItem):
# do something
Antworten:
Sie können diese Syntax verwenden:
if myItem in list:
# do something
Auch inverser Operator:
if myItem not in 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.
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
die 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:
>>> 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
>>>
Ich habe mir kürzlich diesen einen Liner ausgedacht, um herauszufinden, True
ob eine Liste eine beliebige Anzahl von Vorkommen eines Elements False
enthä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)
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 einer if
Anweisung 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:
if myItem not in list:
#do things
index
Methode gibt -1 nicht zurück, wenn das Element nicht vorhanden ist, sondern löst eine ValueError
Ausnahme aus.