Sprawdź, czy lista obiektów zawiera obiekt o określonej wartości atrybutu

106

Chcę sprawdzić, czy moja 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ę mieć możliwość sprawdzenia, czy lista zawiera na przykład obiekt o nazwie "t1". 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ę za każdym razem przeglądać całej listy, po prostu muszę wiedzieć, czy jest jedna instancja, która pasuje. Czy first(...)czy any(...)coś innego to zrobi?

Jiew Meng
źródło
first()Funkcja jest dostępna jako wbudowany nazywa next().
Sven Marnach,

Odpowiedzi:

176

Jak można łatwo zauważyć w dokumentacji , any()funkcja zwiera i zwraca, Truegdy tylko zostanie znalezione dopasowanie.

any(x.name == "t2" for x in l)
Sven Marnach
źródło