Vamos supor que estou criando uma classe simples para funcionar de maneira semelhante a uma estrutura no estilo C, para conter apenas elementos de dados. Estou tentando descobrir como pesquisar uma lista de objetos para objetos com um atributo igual a um determinado valor. Abaixo está um exemplo trivial para ilustrar o que estou tentando fazer.
Por exemplo:
class Data:
pass
myList = []
for i in range(20):
data = Data()
data.n = i
data.n_squared = i * i
myList.append(data)
Como eu pesquisaria a lista myList para determinar se ela contém um elemento com n == 5?
Tenho pesquisado no Google e pesquisado os documentos do Python e acho que posso fazer isso com uma compreensão de lista, mas não tenho certeza. Devo acrescentar que estou precisando usar o Python 2.4.3, a propósito, portanto, nenhum novo recurso gee-whiz 2.6 ou 3.x está disponível para mim.
Respostas:
Você pode obter uma lista de todos os elementos correspondentes com uma compreensão de lista:
Se você simplesmente deseja determinar se a lista contém algum elemento que corresponda e fazê-lo (relativamente) de forma eficiente, você pode fazer
fonte
Simples, elegante e poderoso:
Uma expressão geradora em conjunto com um embutido… (python 2.5+)
Usa o Python
any()
integrado, definido da seguinte maneira:fonte
any(x for x in mylist if x['n'] == 10)
mas é uma boa ideiaApenas para completar, não vamos esquecer a coisa mais simples que poderia funcionar:
fonte
fonte
fonte
lambda
s.Você pode usar
in
para procurar um item em uma coleção e uma compreensão de lista para extrair o campo no qual está interessado. Isso (funciona para listas, conjuntos, tuplas e qualquer coisa que defina__contains__
ou__getitem__
).Veja também:
fonte
Você deve adicionar um
__eq__
e um__hash__
método à suaData
classe, ele pode verificar se os__dict__
atributos são iguais (mesmas propriedades) e, em seguida, se seus valores são iguais também.Se você fez isso, você pode usar
A
in
palavra-chave verifica setest
está emmyList
.Se você deseja apenas uma
n
propriedade,Data
pode usar:fonte
Considere usar um dicionário:
fonte
Outra maneira de fazer isso é usando a função next ().
fonte