在生成器表达式或itertools.chain之间更快更有效地迭代大型列表?

时间:2013-12-11 06:49:32

标签: python generator itertools listiterator

我有大量的字符串列表,我想在此列表上使用iteratoe。我想弄清楚哪个是迭代列表的最佳方法。我尝试过使用以下方法:

  • 生成器表达式:g = (x for x in list)

  • Itertools.chain:ch = itertools.chain(list)

对于列表迭代,还有另一种方法,比这两种方法更好吗?

1 个答案:

答案 0 :(得分:8)

最快的方法是迭代列表。如果你已经有了一个列表,那么分层更多的迭代器/生成器就不会加快速度。

一个好的旧for item in a_list:将与其他任何选项一样快,并且更具可读性。


迭代器和生成器适用于尚未在内存中放置列表的情况。例如,itertools.count()一次只生成一个数字;它没有使用现有的数字列表。

另一种可能的用法是当你链接许多操作时 - 你的中间步骤可以创建迭代器/生成器而不是创建中间列表。例如,如果您想要使用sum()调用对列表中的每个项目进行查找链接,则可以使用生成器表达式来查找输出,sum()将使用该表达式:

total_inches_of_snow = sum(inches_of_snow(date) for date in list_of_dates)

这使您可以避免创建一个包含所有单个英寸雪的中间列表,而只是在sum()消耗它们时生成它们,从而节省内存。