Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多次使用itertools.product的结果_Python_Python 3.x_Itertools - Fatal编程技术网

Python 多次使用itertools.product的结果

Python 多次使用itertools.product的结果,python,python-3.x,itertools,Python,Python 3.x,Itertools,我以通常的形式使用itertools.product生成元组列表 然后,我在myList:循环中使用标准的for I遍历列表,以生成所需的结果 然后,我希望使用myList:中的I对同一循环进行第二次迭代,但在循环输入之前,如果我不重新生成myList,它不会执行第二次循环 为什么会这样 我已经看过python文档中的itertools帮助,它解释了itertools.product()的作用,但没有解释为什么用户需要在每个循环条目之前调用 按需要导入itertools def环件(*lsts

我以通常的形式使用itertools.product生成元组列表

然后,我在myList:循环中使用标准的
for I遍历列表,以生成所需的结果

然后,我希望使用myList:
中的I对同一循环进行第二次迭代,但在循环输入之前,如果我不重新生成myList,它不会执行第二次循环

为什么会这样

我已经看过python文档中的itertools帮助,它解释了itertools.product()的作用,但没有解释为什么用户需要在每个循环条目之前调用

按需要导入itertools
def环件(*lsts):
#可能性清单
所有可能=it.产品(a、b、c)
对于我来说,在所有可能的情况下:
打印(‘第一次通过’,i)
#可能性清单
#如果这是未注释的,则第二次通过有效!!
#所有可能=it.产品(a、b、c)
对于我来说,在所有可能的情况下:
打印('第二遍',i)
回来
a=[3,5,10]
b=[1,9,15]
c=[4,8]
环件(a、b、c)
我希望得到2个列表,但只得到1个列表(
第一次通过


为了获得第二个列表,我需要在进入第二个循环之前运行
allmable=it.product(a,b,c)

itertools.product
返回一个
。你需要列出所有可能得到的结果

按需要导入itertools
def环件(*lsts):
#可能性清单
所有可能=列表(it.product(a、b、c))
对于我来说,在所有可能的情况下:
打印(‘第一次通过’,i)
#可能性清单
#如果这是未注释的,则第二次通过有效!!
#所有可能=it.产品(a、b、c)
对于我来说,在所有可能的情况下:
打印('第二遍',i)
回来
a=[3,5,10]
b=[1,9,15]
c=[4,8]
环件(a、b、c)

itertools.product
返回一个
。你需要列出所有可能得到的结果

按需要导入itertools
def环件(*lsts):
#可能性清单
所有可能=列表(it.product(a、b、c))
对于我来说,在所有可能的情况下:
打印(‘第一次通过’,i)
#可能性清单
#如果这是未注释的,则第二次通过有效!!
#所有可能=it.产品(a、b、c)
对于我来说,在所有可能的情况下:
打印('第二遍',i)
回来
a=[3,5,10]
b=[1,9,15]
c=[4,8]
环件(a、b、c)

使用前面的注释:

答案是:


一些Python标准库函数(如product)返回仅用于一次性迭代的迭代器对象。在内部,它们就像一个指针,指向链表中的一个项目,该项目在每次获取新项目时(通过下一个函数)向上移动一次

解决方案是从(单一使用)对象更改
allmable=it.product(a、b、c)
到列表(使用列表理解工程)
allmable=[x代表it中的x.product(a、b、c)]
使用前面的注释:

答案是:


一些Python标准库函数(如product)返回仅用于一次性迭代的迭代器对象。在内部,它们就像一个指针,指向链表中的一个项目,该项目在每次获取新项目时(通过下一个函数)向上移动一次

解决方案是从(单一使用)对象更改
allmable=it.product(a、b、c)
到列表(使用列表理解工程)
allapable=[x代表其中的x。产品(a、b、c)]
allapable
不是列表。相关:
allapable
不是列表。相关:为什么不能多次使用
?OP的问题是
为什么会这样?
一些Python标准库函数,如product return iterator对象,它们只用于一次性迭代。在内部,它们就像一个指针,指向链表中的一个项目,该项目在每次获取新项目时(通过下一个函数)向上移动一次。转换为列表会在迭代器中进行迭代,但会将所有项存储在“普通”列表中。大多数返回迭代器的函数之所以这样做,是因为它们会动态生成输出,而不是因为它们在某个容器中跟踪已拥有所有输出的位置。是的,这是真的。我的评论并没有涉及到这一点,但似乎无法对其进行编辑。为什么您不能多次使用
?OP的问题是
为什么会这样?
一些Python标准库函数,如product return iterator对象,它们只用于一次性迭代。在内部,它们就像一个指针,指向链表中的一个项目,该项目在每次获取新项目时(通过下一个函数)向上移动一次。转换为列表会在迭代器中进行迭代,但会将所有项存储在“普通”列表中。大多数返回迭代器的函数之所以这样做,是因为它们会动态生成输出,而不是因为它们在某个容器中跟踪已拥有所有输出的位置。是的,这是真的。我的评论并没有涵盖这一点,但似乎无法对其进行编辑。