Vidím, že lidé používají any
ke shromažďování jiného seznamu, aby zjistili, zda položka existuje v seznamu, ale existuje rychlý způsob, jak to udělat ?:
if list.contains(myItem):
# do something
Tuto syntaxi můžete použít:
if myItem in list:
# do something
Také inverzní operátor:
if myItem not in list:
# do something
Je to v pořádku pro seznamy, n-tice, sady a diktáty (kontrolní klávesy).
Poznámka že toto je operace O(n) v seznamech a n-ticích, ale operace O(1) v sadách a diktech.
Kromě toho, co řekli jiní, můžete se také zajímat o to, co in
dělá, je zavolat metodu list.__contains__
, kterou můžete definovat na kterékoli třídě, kterou píšete, a může být velmi užitečná pro používání pythonu v plném rozsahu.
Hloupé užívání může být:
>>> 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
>>>
Přišel jsem s tímto jedním liner nedávno pro získání True
pokud seznam obsahuje libovolný počet výskytů položky, nebo False
pokud obsahuje žádné výskyty nebo vůbec nic. Pomocí parametru next(...)
tato hodnota poskytuje výchozí hodnotu návratu (False
) a znamená, že by měla běžet podstatně rychleji než spuštění celého seznamu.
list_does_contain = next((True for item in list_to_test if item == test_item), False)
Metoda index
seznamu vrátí -1
, pokud položka není přítomna, a vrátí index položky v seznamu, pokud je přítomen. Alternativně v příkazu if
můžete provést následující:
if myItem in list:
#do things
Můžete také zkontrolovat, zda některý prvek není v seznamu s následujícím výrazem:
if myItem not in list:
#do things