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

use*_*163 1 python class list

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

只是为了说清楚.假设我已经定义了一个带有属性的类FooBar

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

A = Foo(5)
B = Foo(6)
C = [A,B]
Run Code Online (Sandbox Code Playgroud)

我是否可以Bar为整个列表同时获取属性以使最终结果为值为[5,6]的列表?谢谢你的帮助

Jon*_*nts 10

你可以使用list-comp:

C = [obj.Bar for obj in (A, B)]
Run Code Online (Sandbox Code Playgroud)

或者:

from operator import attrgetter
C = map(attrgetter('Bar'), (A, B))
Run Code Online (Sandbox Code Playgroud)

注意:它不是严格" 同时 ",而是逐个循环遍历对象就像它一样好.另请注意,对象甚至不需要是同一类型 - 它们只需要具有属性Bar.getattr 如果该属性不存在,您可以使用它来返回默认值:

C = [getattr(obj, 'Bar', None) for obj in (A, B)]
Run Code Online (Sandbox Code Playgroud)

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

C = [obj.Bar for obj in (A, B) if hasattr(obj, 'Bar')]
Run Code Online (Sandbox Code Playgroud)