Widzę, że ludzie używają anydo zebrania innej listy, aby sprawdzić, czy element istnieje na liście, ale czy istnieje szybki sposób, aby to zrobić ?:
if list.contains(myItem):
# do something
Widzę, że ludzie używają anydo zebrania innej listy, aby sprawdzić, czy element istnieje na liście, ale czy istnieje szybki sposób, aby to zrobić ?:
if list.contains(myItem):
# do something
Odpowiedzi:
Możesz użyć tej składni:
if myItem in list:
# do something
Ponadto operator odwrotny:
if myItem not in list:
# do something
Działa dobrze w przypadku list, krotek, zestawów i nagrań (klawisze wyboru).
Zauważ, że jest to operacja O (n) w listach i krotkach, ale operacja O (1) w zestawach i słownikach.
o='--skip'; o in ("--skip-ias"); # returns True !
("--skip-ias")nie jest krotką, ale łańcuchem (nawiasy nic nie robią, tak jak (1)zwykła liczba całkowita). Jeśli chcesz 1-krotkę, musisz dodać przecinek po pojedynczym elemencie: ("--skip-ias",)(lub (1,)).
Oprócz tego, co powiedzieli inni, możesz również chcieć wiedzieć, że to, co inrobi, to wywołać list.__contains__metodę, którą możesz zdefiniować w dowolnej klasie, którą piszesz, i może być bardzo przydatny w użyciu Pythona w pełnym zakresie.
Głupie użycie może być:
>>> 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
>>>
Ostatnio wymyśliłem ten jeden linijka do sprawdzania, Trueczy lista zawiera dowolną liczbę wystąpień elementu lub Falsejeśli nie zawiera żadnych wystąpień lub w ogóle nic. Użycie next(...)daje domyślną wartość zwracaną ( False) i oznacza, że powinien działać znacznie szybciej niż uruchamianie pełnego zrozumienia listy.
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)też by działało, tak myślę?
Metoda listy indexzwróci, -1jeśli element nie jest obecny, i zwróci indeks elementu na liście, jeśli jest obecny. Alternatywnie w ifinstrukcji możesz wykonać następujące czynności:
if myItem in list:
#do things
Możesz również sprawdzić, czy elementu nie ma na liście za pomocą następującej instrukcji if:
if myItem not in list:
#do things
indexSposób nie zwraca -1, jeśli element ten nie jest obecny, zgłasza ValueErrorwyjątek.