如果对象存在变量.X
let customButton;
function _onClick(e) {
customButton.setAttribute('pressed', null);
}
是创建的对象。如果列表中存储了多个对象,并且可以通过
进行访问randomData.X
有没有一种方法可以从列表中提取X的所有值,而无需遍历列表中的每个对象,如下所示:
randomList[3].X
答案 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):
其中不涉及临时list
(map
在Python 3中按需懒惰地提取项目),或者如果您确实需要list
,则只需包装list
构造函数或使用list
进行拆包以将其耗尽:
Xs = list(map(attrgetter('X'), randomList))
# or
Xs = [*map(attrgetter('X'), randomList)]
对于较小的输入list
,这将比对list
的理解要慢(设置开销稍高一些),但是对于中型或大型输入,它将更快(每-项开销稍低,因为它不涉及每个项目的字节码执行。
需要明确的是,它仍然必须遍历list
。没有一种神奇的方法来获取list
中每个项目的属性,而无需对其进行循环。您可以花很长的时间来制作list
的视图,以从底层的list
无缝读取属性,但是如果您访问该视图的每个元素,则将等同于所需的工作循环。