Python 多次使用itertools.product的结果
我以通常的形式使用itertools.product生成元组列表 然后,我在myList:循环中使用标准的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
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对象,它们只用于一次性迭代。在内部,它们就像一个指针,指向链表中的一个项目,该项目在每次获取新项目时(通过下一个函数)向上移动一次。转换为列表会在迭代器中进行迭代,但会将所有项存储在“普通”列表中。大多数返回迭代器的函数之所以这样做,是因为它们会动态生成输出,而不是因为它们在某个容器中跟踪已拥有所有输出的位置。是的,这是真的。我的评论并没有涵盖这一点,但似乎无法对其进行编辑。