it-swarm-eu.dev

Existuje krátká funkce pro seznamy?

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
431
Joan Venge

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.

746
defuz

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
>>>         
60
Ant

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)

5
Dustin Raimondi

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
3
Mr. Squig