Vérifier si la liste d'objets contient un objet avec une certaine valeur d'attribut

104

Je veux vérifier si ma liste d'objets contient un objet avec une certaine valeur d'attribut.

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

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

Je veux un moyen de vérifier si la liste contient un objet avec un nom "t1"par exemple. Comment ceci peut être fait? J'ai trouvé 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

Je ne veux pas parcourir toute la liste à chaque fois, j'ai juste besoin de savoir s'il y a une instance qui correspond. Est-ce que first(...)ou any(...)ou quelque chose d'autre fera cela?

Jiew Meng
la source
La first()fonction est disponible sous la forme d'un appel intégré next().
Sven Marnach

Réponses:

169

Comme vous pouvez facilement le voir dans la documentation , la any()fonction court-circuite un retour Truedès qu'une correspondance a été trouvée.

any(x.name == "t2" for x in l)
Sven Marnach
la source