【发布时间】:2019-09-10 13:21:16
【问题描述】:
我不明白为什么下面的代码会删除所有元素。如何预防?
from sympy.utilities.iterables import variations
x=variations(["H","T"],3, True)
print(list(x))
t=sum(1 for i in x)
print(list(x))
【问题讨论】:
-
如果变体返回一个生成器,然后你使用
list打印它,你会消耗所有元素,所以如果你想保留它就不要打印它 -
@aws_apprentice 所以
sum(1 for i in x)也消耗元素?for也有功能?如何防止这种情况发生,以便我可以首先在列表中找到元素的数量,然后使用for循环多次遍历它。 -
当生成器有大量元素时,如何有效地做到这一点?
-
是的,任何对生成器的操作都会消耗它。如果您需要从中使用一定数量的数字,请将它们保存到单独的数据结构中并使用它。
-
使用
x = list(x)生成器生成的列表。itertools具有类似tee的复制迭代器的功能。但我不确定这会让你的代码更有效率。
标签: python iterator generator sympy iterable