【问题标题】:collecting values from objects in a list从列表中的对象收集值
【发布时间】:2013-11-28 17:07:51
【问题描述】:

我有一个包含自定义类对象的列表,例如:

class myClass:
    pass

myList=[]

for i in range(100):
    myObj=myClass()
    myObj.prop1=i
    myObj.prop2=i*i
    myList.append(myObj)

现在我想将这些对象的某些属性的所有值收集到单独的列表中;现在我这样做:

myValuesList = []
for obj in myList: myValuesList.append(obj.prop1)

有更好/更快的方法吗?与maplambda 有什么关系?

【问题讨论】:

    标签: python lambda


    【解决方案1】:

    List comprehensions tend to be faster:

    myValueList = [obj.prop1 for obj in myList]
    

    operator.attrgettermap 可能会更快:

    myValueList = map(operator.attrgetter('prop1'), myList)  # use list(map(...)) in python3.x
    

    【讨论】:

    • 同样,如果 OP 可以在 myClass 中定义 __init__ 方法,第一个循环也可以替换为 LC。
    • 谢谢!但是,我还不清楚第二个变体:当我运行 myValueList = list(map(operator.attrgetter('prop1'), myList))(我在 Python 3 上)时,我收到一个错误 NameError: name 'operator' is not defined
    • @VasilyA: import operator
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2021-07-04
    • 2022-06-16
    相关资源
    最近更新 更多