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?


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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.