2012-02-21 25 views
52

Chcę sprawdzić, czy moja lista obiektów zawiera obiekt o określonej wartości atrybutu.Sprawdź, czy Lista obiektów zawiera obiekt o określonej wartości atrybutu

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

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

Chcę sposobu sprawdzania, czy lista zawiera obiekt o nazwie t1 na przykład. Jak można to zrobić? Znalazłem 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 

nie chcę przejść przez całą listę za każdym razem, po prostu trzeba wiedzieć, czy tam 1 instancja, która pasuje. będzie first(...) lub any(...) czy coś innego to zrobić?

+0

Funkcja 'first()' jest dostępna jako wbudowany o nazwie 'next()'. –

Odpowiedz

84

Jak można łatwo zauważyć po documentation, funkcja zwarcia zwróci wartość True natychmiast po znalezieniu dopasowania.

any(x.name == "t2" for x in l) 
Powiązane problemy