Python 如何使用itertools.product()每次输出一个元组,而不是一次输出整个元组列表?

Python 如何使用itertools.product()每次输出一个元组,而不是一次输出整个元组列表?,python,Python,我想知道是否有办法让itertools.product()每次生成一个元组,而不是生成整个结果(元组列表) 代码: 当repeat=2时,以下代码中的itertools.product()生成(0,0)、(0,1)、(1,0)、(1,1)。 如果所考虑的元组中1的数量大于0的数量,则代码会将1添加到所需列表中。 在代码执行之后, desired=[1],因为只有元组(1,1)满足条件 相同的代码不适用于repeat=999,因为itertools.product()提供了Python无法处理的大

我想知道是否有办法让
itertools.product()
每次生成一个元组,而不是生成整个结果(元组列表)

代码:

repeat=2
时,以下代码中的
itertools.product()
生成
(0,0)、(0,1)、(1,0)、(1,1)
。 如果所考虑的元组中
1
的数量大于
0
的数量,则代码会将
1
添加到所需列表中。 在代码执行之后,
desired=[1]
,因为只有元组
(1,1)
满足条件

相同的代码不适用于
repeat=999
,因为
itertools.product()
提供了Python无法处理的大量输出。由于这个原因,我希望
itertools.product()
一次只生成一个项目,而不是整个项目列表(这将很难处理)。
还有其他方法吗?

重复的目的是产生组合/笛卡尔集

当您有
repeat=3
并将其列为
[0,1]
时,结果为

000 001 010 011 100 101 110 111

元素的数量为23

repeat
999时,则有2999个元素与5x10300非常接近

每个整数在内存中为16字节。执行此操作时,内存中有3x5x10300个这样的整数。因此,内存错误


注意:笛卡尔积由于大量重复而变得疯狂。使用时要小心。

实际上
itertools.product([0,1],repeat=2)
一次只提供一个元素。您的列表理解是迭代所有值并从中列出。您可以使用以下简明语法返回迭代器,请注意“(”而不是“[”

通过这种方式,您可以一次处理一个值,而无需一次将所有值加载到内存中

导入itertools
如果(i.count(1)>i.count(0)),则期望的_iter=(i在itertools.product([0,1]中为i,重复=2)
#然后,当需要和处理时,您可以在for循环中使用“所需的iter”
#一次一个值
对于所需iter中的i:
印刷品(一)

itertools.product
一次只能生成一个项目。内存问题是你的错,因为你正试图构建一个巨大的列表(即使你不尝试构建列表,你也永远无法完成-要处理的元组太多了。你需要一个更聪明的方法)。有没有其他内置函数可以用来实现相同的功能?或者是因为内存错误根本不可能实现?您需要为像999这样的大重复生成笛卡尔积吗?如果是,那么您需要一台超级计算机。XD基本上,您需要16x15x10^300字节的内存。@user8735299这是您想要的还是我理解的ng?是的,谢谢,我不知道为什么,但它仍然给我记忆错误。
desired = [1 for i in itertools.product([0,1],repeat=2) if (i.count(1)>i.count(0)]