在Python中将对象存储在列表中

时间:2019-06-13 22:39:12

标签: python list loops object variables

如果对象存在变量.X

let customButton;

function _onClick(e) {
        customButton.setAttribute('pressed', null);
}

是创建的对象。如果列表中存储了多个对象,并且可以通过

进行访问
randomData.X 

有没有一种方法可以从列表中提取X的所有值,而无需遍历列表中的每个对象,如下所示:

randomList[3].X

2 个答案:

答案 0 :(得分:3)

您可能正在寻找列表理解。

[obj.X for obj in randomList]

这将产生一个列表,其中包含对象列表中每个对象的所有属性X。

请记住,您无法无视循环列表。这只是与以前相同的循环的语法糖。

答案 1 :(得分:1)

即使您要在较大的list上寻求最大效率,在这种情况下,list理解的替代方法是使用map + operator.attrgetter。您可以直接在map上循环:

from operator import attrgetter

for X in map(attrgetter('X'), randomList):

其中不涉及临时listmap在Python 3中按需懒惰地提取项目),或者如果您确实需要list,则只需包装list构造函数或使用list进行拆包以将其耗尽:

Xs = list(map(attrgetter('X'), randomList))
# or
Xs = [*map(attrgetter('X'), randomList)]

对于较小的输入list,这将比对list的理解要慢(设置开销稍高一些),但是对于中型或大型输入,它将更快(每-项开销稍低,因为它不涉及每个项目的字节码执行。

需要明确的是,它仍然必须遍历list。没有一种神奇的方法来获取list中每个项目的属性,而无需对其进行循环。您可以花很长的时间来制作list的视图,以从底层的list无缝读取属性,但是如果您访问该视图的每个元素,则将等同于所需的工作循环。