多次使用itertools.product的结果

问题描述 投票:0回答:1

我以通常的形式使用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)

python python-3.x itertools
1个回答
1
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.