Python:以最有效的方式从相同类型的对象列表中获取属性

标签 python list class

我想知道从相同类型的对象列表中获取属性的最佳方法是什么。有没有比 for 循环更有效的解决方案?我尝试使用 getattr 但无法使用列表。

只是为了说清楚。假设我定义了一个 Foo 类,其属性为 Bar

class Foo():
    def __init__(self, Bar):
        self.bar = Bar

A = Foo(5)
B = Foo(6)
C = [A,B]

我可以做些什么来同时为整个列表获取属性 Bar 以便最终结果将是一个值为 [5,6] 的列表吗? 感谢您的帮助

最佳答案

你可以使用列表组件:

C = [obj.Bar for obj in (A, B)]

或者:

from operator import attrgetter
C = map(attrgetter('Bar'), (A, B))

注意:它不是严格意义上的“同时”,而是一个接一个地遍历对象是最好的。另请注意,对象甚至不需要是同一类型 - 它们只需要具有属性 Bar。如果属性不存在,您可以使用 getattr 返回默认值:

C = [getattr(obj, 'Bar', None) for obj in (A, B)]

或者,如果您想丢弃没有该属性而不是默认值的项目:

C = [obj.Bar for obj in (A, B) if hasattr(obj, 'Bar')]

关于Python:以最有效的方式从相同类型的对象列表中获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366874/

相关文章:

python - 在列表中的另一个值之后插入一个值

java - Android:对象包含类 ID

python - Pygame - 创建 "Enemy"类,然后将其导入游戏

类的 C# 可选数组参数

python - 将文本网格转换为python中的嵌套字典

python - 有没有办法在 python 3.8.6 中为每个函数创建多个具有通用名称的对象

python - 放大和缩小小部件

python - Flask Python 应用程序无法创建数据库游标

python - 根据列表将列表包装成自定义字符串

python - 当使用另一个列表附加数学列表时,如何使第二个列表与第一个列表的长度相同?