在同一类的实例列表中提取同一成员的最快方法

2024-09-30 20:39:02 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个高性能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

问题是如何使这一点快速


Tags: 实例selflenobjectfooinitdef高性能
3条回答
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

您可以使用列表理解来提取lFoos列表中每个Foo对象的spam属性,如下所示:

new_list = [foo_obj.spam for foo_obj in lFoos]

不知道你怎么能比下面更快:

[foo.spam for foo in lFoos]

相关问题 更多 >