2012-10-17 5 views

Antwort

517

Sie diese Syntax verwenden:

if myItem in list: 
    # do something 

auch inverser Operator:

if myItem not in list: 
    # do something 

Es ist gut funktioniert für Listen, Tupel, Sets und dicts (Check-Tasten).

Hinweis, dass dies eine O (n) -Operation in Listen und Tupeln ist, aber eine O (1) -Operation in Sätzen und Dikten.

+1

Mit einer Liste numpy Arrays enthält, wird diese Prüfung für numpy Instanzen oder Werte innerhalb der numpy Instanzen? –

+0

Vorsicht! Dies stimmt überein, während dies sehr wahrscheinlich ist, was Sie nicht erwartet haben: 'o = '- überspringen'; o in ("- skip-ias"); # gibt True zurück! ' –

0

Die Listenmethode index gibt -1 zurück, wenn das Element nicht vorhanden ist, und gibt den Index des Elements in der Liste zurück, wenn es vorhanden ist. Alternativ in einer if Anweisung können Sie folgendes tun:

if myItem in list: 
    #do things 

Sie können auch überprüfen, ob ein Element nicht in einer Liste mit der folgenden ist if-Anweisung:

if myItem not in list: 
    #do things 
+11

Die Methode' index' gibt nicht -1 zurück, wenn das Element nicht vorhanden ist, löst es eine Ausnahme 'ValueError' aus. – MondKin

49

Zusätzlich zu, was andere gesagt haben, Vielleicht interessiert es Sie auch zu wissen, dass das, was in tut, die list.__contains__ -Methode aufruft, die Sie für jede Klasse, die Sie schreiben, definieren können und extrem praktisch sein können, um Python in vollem Umfang zu verwenden.  

Eine stumme Nutzen sein kann:

>>> 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 
>>>   
0

ich für immer True vor kurzem mit diesem Motto kam, wenn eine Liste beliebige Anzahl von Vorkommen eines Elements enthält, oder False wenn es enthält keine Vorkommnisse oder nichts überhaupt. Die Verwendung von next(...) gibt dies einen Standard-Rückgabewert (False) und bedeutet, dass es deutlich schneller als das gesamte Listenverständnis laufen sollte.

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

+0

In meinem Fall habe ich eine Liste von Objekt namens Category und muss es nur für die Eigenschaft Link testen, damit diese Lösung in meinem Fall besser passt. Vielen Dank – rodrigorf

Verwandte Themen