Verifique se a lista de objetos contém um objeto com um determinado valor de atributo


103

Quero verificar se minha lista de objetos contém um objeto com um determinado valor de atributo.

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

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

Eu quero uma maneira de verificar se a lista contém um objeto com nome, "t1"por exemplo. Como pode ser feito? Encontrei 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

Não quero passar por toda a lista todas as vezes, só preciso saber se há 1 instância correspondente. Será que first(...)ou any(...)algo mais fará isso?


A first()função está disponível como uma chamada embutida next().
Sven Marnach

Respostas:


168

Como você pode ver facilmente na documentação , a any()função entra em curto-circuito e retorna Trueassim que uma correspondência for encontrada.

any(x.name == "t2" for x in l)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.