2012-02-21 13 views
52

Voglio verificare se il mio elenco di oggetti contiene un oggetto con un determinato valore di attributo.Controllare se Elenco di oggetti contiene un oggetto con un determinato valore di attributo

class Test: 
    def __init__(self, name): 
     self.name = name 

# in main() 
l = [] 
l.append(Test("t1")) 
l.append(Test("t2")) 
l.append(Test("t2")) 

Voglio un modo per controllare se l'elenco contiene un oggetto con il nome t1 per esempio. Come può essere fatto? Ho trovato https://stackoverflow.com/a/598415/292291,

[x for x in myList if x.n == 30]    # list of all matches 
any(x.n == 30 for x in myList)     # if there is any matches 
[i for i,x in enumerate(myList) if x.n == 30] # indices of all matches 

def first(iterable, default=None): 
    for item in iterable: 
    return item 
    return default 

first(x for x in myList if x.n == 30)   # the first match, if any 

Non voglio passare attraverso l'intera lista ogni volta, ho solo bisogno di sapere se ci sono 1 grado che corrisponde. sarà first(...) o any(...) o qualcos'altro farlo?

+0

La funzione 'first()' è disponibile come built-in chiamata 'next()'. –

risposta

84

Come si può facilmente vedere dallo documentation, la funzione any() cortocircuita e restituisce True non appena viene trovata una corrispondenza.

any(x.name == "t2" for x in l) 
Problemi correlati