2010-03-14 4 views
1

Supposons que j'ai une liste X = [a, b, c] où a, b, c sont des instances de la même classe C. Maintenant, toutes ces instances , b, c, ont une variable appelée v, av, bv, cv ... Je veux simplement une liste Y = [av, bv, cv]Accéder aux variables de classes à partir d'une liste de façon sympa en Python

Y at-il une bonne commande pour le faire? La meilleure façon que je peux penser est:

Y = [] 
for i in X 
    Y.append(i.v) 

Mais il ne semble pas très élégant ~ car il doit être répété pour tout donné « v » Toutes les suggestions? Je ne pouvais pas trouver un moyen d'utiliser "carte" pour ce faire.

Répondre

11

Cela devrait fonctionner:

Y = [x.v for x in X] 
+0

C'est un raccourci génial, merci! – Deniz

+0

+1 plus de compréhension de la liste s'il vous plaît –

2

je ferais une compréhension de la liste:

Y = [ i.v for i in X ] 

Il est plus court et plus conveniant.

5

La compréhension de la liste est la voie à suivre.

Mais vous avez également dit que vous ne savez pas comment utiliser la carte pour le faire. Maintenant, je ne recommande à utiliser pour map du tout, mais il peut être fait:

map(lambda x: x.v, X) 

qui est, vous créez une fonction anonyme (un lambda) pour retourner cet attribut.

Si vous préférez utiliser les méthodes de bibliothèque Python (savoir tes outils ...), alors quelque chose comme:

map(operator.attrgetter("v"),X) 

devrait également fonctionner.

+0

Ceci est très utile, merci. – Deniz

+0

@Deniz Je pense qu'il est juste d'attribuer la réponse à FlorianH car il a vraiment la meilleure solution dans ce cas, et était le premier avec la réponse. Ma réponse était plus destinée à montrer des moyens alternatifs, et à montrer comment utiliser la carte dans ce cas. – extraneon

+0

Bon point ~ fait! :) – Deniz

Questions connexes