我很好奇使用迭代器最快的方法是什么,也是最 Pythonic 的方法。
例如,假设我想创建一个迭代器map
内置函数会累积一些东西作为副作用。我实际上并不关心结果map
,只是副作用,所以我想以尽可能少的开销或样板来完成迭代。就像是:
my_set = set()
my_map = map(lambda x, y: my_set.add((x, y)), my_x, my_y)
在这个例子中,我只是想通过迭代器来积累东西my_set
, and my_set
在我真正跑完之前只是一个空集my_map
。就像是:
for _ in my_map:
pass
或裸体
[_ for _ in my_map]
有效,但它们都感觉笨重。有没有一种更 Pythonic 的方法来确保迭代器快速迭代,以便您可以从一些副作用中受益?
基准
我对上述两种方法进行了测试,结果如下:
my_x = np.random.randint(100, size=int(1e6))
my_y = np.random.randint(100, size=int(1e6))
with my_set
and my_map
如上所定义。我用 timeit 得到了以下结果:
for _ in my_map:
pass
468 ms ± 20.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
[_ for _ in my_map]
476 ms ± 12.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
两者之间没有真正的区别,而且都感觉笨重。
注意,我得到了类似的性能list(my_map)
,这是评论中的建议。