我以通常的形式使用itertools.product来生成元组列表。
然后我使用标准的for i in myList:
循环遍历列表以生成所需的结果。
然后,我希望使用for i in myList:
在同一循环中第二次进行迭代,但是如果没有在循环进入之前重新生成myList
,它不会执行第二个循环。
这是为什么?
[我已经看过python文档中的itertools帮助,该帮助说明了itertools.product()的功能,但没有说明用户为何需要在每次循环进入之前调用。
https://docs.python.org/2/library/itertools.html#itertools.product
import itertools as it
def loopsThings(*lsts):
# list of possibilities
allPossible = it.product(a, b, c)
for i in allPossible:
print('first pass', i)
# list of possibilities
# second pass works if this is un-commented !!
# allPossible = it.product(a, b, c)
for i in allPossible:
print('second pass', i)
return
a = [3, 5, 10]
b = [1, 9, 15]
c = [4, 8]
loopsThings(a, b, c)
我希望获得2个列表,但仅获得1个列表(first pass
)
为了获得第二个列表,我需要在进入第二个循环之前运行allPossible = it.product(a, b, c)
。
itertools.product
返回<class 'itertools.product'>
。您需要列出allPossible列表才能获得预期的结果。
import itertools as it
def loopsThings(*lsts):
# list of possibilities
allPossible = list(it.product(a, b, c))
for i in allPossible:
print('first pass', i)
# list of possibilities
# second pass works if this is un-commented !!
# allPossible = it.product(a, b, c)
for i in allPossible:
print('second pass', i)
return
a = [3, 5, 10]
b = [1, 9, 15]
c = [4, 8]
loopsThings(a, b, c)