Python 在generator expression和itertools.chain之间迭代大型列表哪个更快更有效?

Python 在generator expression和itertools.chain之间迭代大型列表哪个更快更有效?,python,generator,itertools,listiterator,Python,Generator,Itertools,Listiterator,我有一个很大的字符串列表,我想迭代这个列表。我想找出迭代列表的最佳方式。我尝试了以下方法: 生成器表达式:g=(列表中x代表x) Itertools.chain:ch=Itertools.chain(列表) 对于列表迭代,还有比这两种更好的方法吗?最快的方法就是迭代列表。如果您已经有了一个列表,那么分层更多的迭代器/生成器不会加快任何速度 对于列表中的项目来说,一个好的:将与任何其他选项一样快,而且肯定更具可读性 迭代器和生成器适用于内存中还没有列表的情况itertools.count()

我有一个很大的字符串列表,我想迭代这个列表。我想找出迭代列表的最佳方式。我尝试了以下方法:

  • 生成器表达式:
    g=(列表中x代表x)

  • Itertools.chain:
    ch=Itertools.chain(列表)


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

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

对于列表中的项目来说,一个好的
将与任何其他选项一样快,而且肯定更具可读性


迭代器和生成器适用于内存中还没有列表的情况<例如,code>itertools.count()一次只生成一个数字;它不是根据现有的数字列表工作的

另一个可能的用途是当您链接许多操作时-您的中间步骤可以创建迭代器/生成器,而不是创建中间列表。例如,如果要使用
sum()
调用链接列表中每个项目的查找,可以使用生成器表达式作为查找的输出,然后
sum()
将消耗:

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

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

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

对于列表中的项目来说,一个好的
将与任何其他选项一样快,而且肯定更具可读性


迭代器和生成器适用于内存中还没有列表的情况<例如,code>itertools.count()一次只生成一个数字;它不是根据现有的数字列表工作的

另一个可能的用途是当您链接许多操作时-您的中间步骤可以创建迭代器/生成器,而不是创建中间列表。例如,如果要使用
sum()
调用链接列表中每个项目的查找,可以使用生成器表达式作为查找的输出,然后
sum()
将消耗:

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

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

itertools.chain(list)
是毫无意义的。该函数是由两个或两个以上的迭代器组成的,仅将其应用于一个迭代器只会给您带来不必要的间接层次。“timeit”模块是您的朋友:当我看到标题时,我已经准备好发布“itertools.chain,但这并不重要,除非它是一个瓶颈”,但这里的两个选项都很愚蠢。如果您确实需要迭代器而不是直接使用列表,
iter(list)
是最好的选择,但是
for item in list
可能就是您所需要的。(另外,不要调用变量
list
。当您尝试调用
list(某物)
itertools时,会出现奇怪的错误。链(list)
是没有意义的。该函数是由两个或两个以上的迭代器组成的,仅将其应用于一个迭代器只会给您带来不必要的间接层次。“timeit”模块是您的朋友:当我看到标题时,我已经准备好发布“itertools.chain,但这并不重要,除非它是一个瓶颈”,但这里的两个选项都很愚蠢。如果您确实需要迭代器而不是直接使用列表,
iter(list)
是最好的选择,但是
for item in list
可能就是您所需要的。(另外,不要调用变量
list
。当您尝试调用
list(某物)
时,您会遇到奇怪的错误)