ids = []
for object in objects:
ids += [object.id]
答案 0 :(得分:27)
您可以使用列表理解:
ids = [object.id for object in objects]
供您参考:
两者产生相同的结果。在许多情况下,列表理解是一种优雅和pythonic的方式来做与你提到的相同。
答案 1 :(得分:4)
标准(即“pythonic”a.k.a cleanest :)方式是使用列表理解:
ids= [obj.id for obj in objects]
以上适用于所有Python版本≥2.0。
在Python 2中,你也可以这样做:
ids= map(lambda x: x.id, objects)
哪个应该是最慢的方法,或
# note: Python ≥ 2.4
import operator
ids= map(operator.attrgetter('id'), objects)
哪个可能是最快的方法,尽管我认为差异不会那么大;无论哪种方式,列表理解的清晰度都超过了速度增益。
如果您想在Python 3中使用其他方法,则应将map
调用括在list
来电中:
ids= list(map(operator.attrgetter('id'), objects))
因为map
内置函数返回生成器而不是Python 3中的列表。
答案 2 :(得分:3)
另一种方式:
ids = map(lambda x: x.id, objects)
答案 3 :(得分:1)
您不需要操作员模块:
In [12]: class Bar(object):
def __init__(self, id_):
self.id = id_
In [15]: foo = [Bar(1) for _ in xrange(10000)]
In [16]: foobar = map(lambda bar: getattr(bar, 'id'), foo)
In [17]: len(foobar)
Out[17]: 10000
In [18]: foobar[:10]
Out[18]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]