将迭代器转换为列表的最快方法


184

有一个iterator对象,是否有比列表理解更快,更好或更正确的方法来获取迭代器返回的对象的列表?

user_list = [user for user in user_iterator]

1
在对此进行优化之前,请确保您已经进行了一些分析以证明这确实是瓶颈。
S.Lott

1
@ S.Lott。我通常都同意这种态度,但是在这种情况下,应该在风格上对其进行很大程度的优化,就像在Python中经常出现的那样,它也会对速度进行优化。
aaronasterling

3
OP没说有瓶颈。这是一个很好的通用问题,答案很简单,它不需要依赖可以通过分析器运行的特定应用程序。
肯·威廉姆斯

4
最紧凑的方法是[*iterator]
Challenger5

Answers:


335
list(your_iterator)

5
实际上,几乎总是快很多。而且,更明显。
Thomas Wouters 2010年

8
@systempuntoout它完全在C中运行。列表理解在python中。当然,它运行得更快。
aaronasterling

3
我仍然完全讨厌python中没有更好的方法。必须仅对表达式的两侧进行编辑才能对其进行切片或索引,这很繁琐。(如果是zip等纯表达式,或者具有纯函数的映射,则在python3中非常常见)
Jo So

import matplotlib.pyplot as plt' followed by ax = plt.gca()`并list(ax._get_lines.prop_cycler)导致无限循环。有没有一种优雅的方式来解决这个问题?
Jens Munk

5
在我的快速测试中,速度[*your_iterator]大约是的两倍list(your_iterator)。这通常是正确的,还是只是特定的场合?(我使用了map迭代器。)
Neinstein,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.