我有大量的字符串列表,我想在此列表上使用iteratoe。我想弄清楚哪个是迭代列表的最佳方法。我尝试过使用以下方法:
生成器表达式:g = (x for x in list)
Itertools.chain:ch = itertools.chain(list)
对于列表迭代,还有另一种方法,比这两种方法更好吗?
答案 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()
消耗它们时生成它们,从而节省内存。