Widzę, że ludzie używają any
do 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ą any
do 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 in
robi, 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, True
czy lista zawiera dowolną liczbę wystąpień elementu lub False
jeś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 index
zwróci, -1
jeśli element nie jest obecny, i zwróci indeks elementu na liście, jeśli jest obecny. Alternatywnie w if
instrukcji 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
index
Sposób nie zwraca -1, jeśli element ten nie jest obecny, zgłasza ValueError
wyjątek.