从对象列表创建类变量列表

时间:2018-08-16 13:22:38

标签: python indexing

花俏的标题标题。 我想创建一个值列表,该值对应于对象列表的变量。可以这样巧妙地完成;

class Example:
    def __init__(self, x):
        self.x = x
objlist = [ Example(i) for i in range(10) ]
DESIRED_OUTCOME = [ obj.x for obj in objlist ]

但是,这似乎令人讨厌且麻烦,所以我想知道是否有一种方法可以一次索引所有值。

我想知道是否有一种语法可以让我立即取出所有变量,例如从2d数组中提取第一个轴数组;

ex = example2darray[:,1] #2d array syntax
OUTCOME = objlist[:, objlist.x] #Is there something like this that exists?
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

我希望这个问题有意义

1 个答案:

答案 0 :(得分:0)

与此无关, unpythonic ,IMO,但是如果您真的想“直接”遍历实例的x值而不是从对象本身获取它们,则可以映射他们operator.attrgetter

import operator

objlist = [Example(i) for i in range(10)]

DESIRED_OUTCOME = map(operator.attrgetter("x"), objlist)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

请注意,在Python 3.x上,map()返回一个迭代器,因此,如果要获得list的结果,请确保将其转换为一个。另外,除非您以特殊方式构造Example,否则几乎所有东西都会比您认为“不优雅”的旧列表理解循环要慢。