这是一个高性能的Python问题:
我的同事给了我一份Foo类实例的清单。
class Foo(object):
def __init__(self):
stuff
...
self.spam = random number
....
列表很大,我关心的是每个实例中的 spam 元素。我想把它们放在一个列表中。现在我做这个工作正常但很慢:
mySpams = [None] * len(lFoos)
for myFoo in range(len(lFoos)):
mySpams[myFoo] = lFoos[myFoo].spam
问题是如何快速做到这一点。
答案 0 :(得分:4)
您可以使用列表理解来提取Foo
列表中每个lFoos
对象的垃圾邮件属性:
new_list = [foo_obj.spam for foo_obj in lFoos]
答案 1 :(得分:2)
不确定如何比以下更快:
[foo.spam for foo in lFoos]
答案 2 :(得分:1)
class Foo():
def __init__(self, val):
self.val = val
lFoo = [Foo(i) for i in range(1000)]
%timeit [f.val for f in lFoo]
10000 loops, best of 3: 52.5 µs per loop
%timeit list(map(lambda f: f.val, lFoo))
10000 loops, best of 3: 114 μs per loop