145 votes

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

Je veux vérifier si ma liste d'objets contient un objet ayant 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 cela peut-il se faire ? 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 passer en revue toute la liste à chaque fois, j'ai juste besoin de savoir s'il y a une instance qui correspond. Will first(...) o any(...) ou autre chose qui fait ça ?

256voto

Sven Marnach Points 133943

Comme vous pouvez le voir sur le documentation le any() La fonction court-circuite un retour True dès qu'une correspondance a été trouvée.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X