Supposons que je crée une classe simple pour fonctionner de manière similaire à une structure de style C, pour contenir uniquement des éléments de données. J'essaie de comprendre comment rechercher une liste d'objets pour les objets avec un attribut égal à une certaine valeur. Voici un exemple trivial pour illustrer ce que j'essaie de faire.
Par exemple:
class Data:
pass
myList = []
for i in range(20):
data = Data()
data.n = i
data.n_squared = i * i
myList.append(data)
Comment pourrais-je rechercher dans la liste myList pour déterminer si elle contient un élément avec n == 5?
J'ai cherché sur Google et recherché la documentation Python, et je pense que je pourrais peut-être le faire avec une compréhension de liste, mais je ne suis pas sûr. Je pourrais ajouter que je dois utiliser Python 2.4.3 en passant, donc toutes les nouvelles fonctionnalités de gee-whiz 2.6 ou 3.x ne sont pas disponibles pour moi.
Réponses:
Vous pouvez obtenir une liste de tous les éléments correspondants avec une compréhension de liste:
Si vous voulez simplement déterminer si la liste contient un élément qui correspond et le faire (relativement) efficacement, vous pouvez faire
la source
Simple, élégant et puissant:
Une expression de générateur en conjonction avec un builtin… (python 2.5+)
Utilise la fonction
any()
intégrée Python , qui est définie comme suit:la source
any(x for x in mylist if x['n'] == 10)
mais c'est une bonne idéeJuste pour être complet, n'oublions pas la chose la plus simple qui pourrait éventuellement fonctionner:
la source
la source
la source
lambda
s.Vous pouvez utiliser
in
pour rechercher un élément dans une collection et une compréhension de liste pour extraire le champ qui vous intéresse. Cela (fonctionne pour les listes, les ensembles, les tuples et tout ce qui définit__contains__
ou__getitem__
).Voir également:
la source
Vous devriez ajouter a
__eq__
et une__hash__
méthode à votreData
classe, cela pourrait vérifier si les__dict__
attributs sont égaux (mêmes propriétés) et ensuite si leurs valeurs sont égales aussi.Si vous avez fait cela, vous pouvez utiliser
Le
in
mot-clé vérifie sitest
est dansmyList
.Si vous ne voulez qu'une
n
propriété,Data
vous pouvez utiliser:la source
Pensez à utiliser un dictionnaire:
la source
Une autre façon de procéder consiste à utiliser la fonction next ().
la source