Czy istnieje krótka funkcja contains dla list?

Widzę, że ludzie używają any do zebrania innej listy, aby sprawdzić, czy Element istnieje na liście, ale czy jest jakiś szybki sposób, aby to zrobić?:

if list.contains(myItem):
    # do something
Author: martineau, 2012-10-17

4 answers

Możesz użyć tej składni:

if myItem in list:
    # do something

Również operator odwrotny:

if myItem not in list:
    # do something

Działa dobrze dla list, krotek, zestawów i dictów (klawiszy wyboru).

Zauważ, że jest to operacja O(n) w listach i krotkach, ale operacja O (1) W setach i dictach.

 628
Author: defuz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-17 12:30:33

Oprócz tego, co powiedzieli inni, możesz być również zainteresowany, aby wiedzieć, że to, co robi in, to wywoływanie metody list.__contains__, którą możesz zdefiniować na dowolnej klasie, którą piszesz i która może być niezwykle przydatna do używania 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
>>>         
 54
Author: Ant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-18 21:00:37

Wymyśliłem ten jeden liner niedawno, aby uzyskać True jeśli lista zawiera dowolną liczbę wystąpień elementu, lub False jeśli nie zawiera żadnych wystąpień lub nic w ogóle. Użycie next(...) daje temu domyślną wartość zwracaną (False) i oznacza, że powinno działać znacznie szybciej niż uruchamianie całej listy.

list_does_contain = next((True for item in list_to_test if item == test_item), False)

 3
Author: Dustin Raimondi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 23:13:14

Metoda list index zwróci -1, Jeśli element nie jest obecny, i zwróci indeks elementu na liście, jeśli jest obecny. Alternatywnie w deklaracji if można wykonać następujące czynności:

if myItem in list:
    #do things

Możesz również sprawdzić, czy element nie znajduje się na liście za pomocą następującej instrukcji if:

if myItem not in list:
    #do things
 0
Author: Mr. Squig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-17 12:22:43