Хороший доступ к переменным класса из списка в Python - PullRequest
1 голос
/ 14 марта 2010

Предположим, у меня есть список X = [a, b, c], где a, b, c - экземпляры одного и того же класса C. Теперь все эти экземпляры a, b, c, имеют переменную с именем v, a.v, b.v, c.v ... Я просто хочу список Y = [a.v, b.v, c.v]

Есть хорошая команда для этого? Лучший способ, которым я могу придумать, это:

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

Но это не выглядит очень элегантно ~, так как это нужно повторить для любого данного "v" Какие-либо предложения? Я не мог найти способ использовать «карту» для этого.

Ответы [ 3 ]

11 голосов
/ 14 марта 2010

Это должно работать:

Y = [x.v for x in X]
5 голосов
/ 14 марта 2010

Понимание списка - путь.

Но вы также сказали, что не знаете, как использовать карту, чтобы сделать это. Теперь я бы не рекомендовал использовать map для этого вообще, но это можно сделать:

map( lambda x: x.v, X)

то есть вы создаете анонимную функцию (лямбду) для возврата этого атрибута.

Если вы предпочитаете использовать методы библиотеки python (знайте свои инструменты ...), тогда что-то вроде:

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

также должно работать.

2 голосов
/ 14 марта 2010

Я бы сделал понимание списка:

Y = [ i.v for i in X ]

Это короче и удобнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...