2012-10-17 3 views

risposta

517

È possibile utilizzare questa sintassi:

if myItem in list: 
    # do something 

Inoltre, l'operatore inverso:

if myItem not in list: 
    # do something 

e 'un lavoro bene per liste, tuple, set e dicts (controllare le chiavi).

Nota che questa è un'operazione O (n) in elenchi e tuple, ma un'operazione O (1) in insiemi e dict.

+1

Con una lista contenente gli array NumPy, sarà questo assegno per le istanze NumPy o valori all'interno dei casi numpy? –

+0

Attenzione! Ciò corrisponde a ciò che molto probabilmente è quello che non ti aspettavi: 'o = '- skip'; o in ("--skip-ias"); # restituisce True! ' –

0

Il metodo di lista index restituirà -1 se l'articolo non è presente e restituirà l'indice dell'elemento nell'elenco se presente. In alternativa in un if dichiarazione è possibile effettuare le seguenti operazioni:

if myItem in list: 
    #do things 

si può anche verificare se un elemento non è in lista con la seguente if:

if myItem not in list: 
    #do things 
+11

Il metodo' index' non restituisce -1 se l'elemento non è presente, genera un'eccezione 'ValueError'. – MondKin

49

In aggiunta a ciò che altri hanno detto , potresti anche essere interessato a sapere che cosa fa in è chiamare il metodo list.__contains__, che puoi definire su qualsiasi classe che scrivi e può essere estremamente utile per usare python nella sua misura massima.  

Un uso muto può essere:

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

sono arrivato fino a questo rivestimento di recente per ottenere True se un elenco contiene qualsiasi numero di occorrenze di un elemento, o False se non contiene occorrenze o niente affatto. L'utilizzo di next(...) fornisce un valore di ritorno predefinito (False) e significa che deve essere eseguito molto più rapidamente rispetto all'esecuzione dell'intera comprensione di elenchi.

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

+0

Nel mio caso ho un elenco di oggetti chiamato Category e ne ho bisogno per testare solo la proprietà Link, quindi questa soluzione si adatta meglio nel mio caso. Grazie – rodrigorf