python多列表嵌套for循环转换为一个函数

时间:2014-10-14 17:40:13

标签: python list recursion

例如

a = [1, 2, 3]
b = [4, 5, 6, 7]
c = [8, 9]

for i in a:
    for l in b:
        for h in c:
            print [i,l,h]

但如果有d,e,f ...

我想定义一个函数可以打印它们但不使用嵌套的。

怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用itertools.product

>>> import itertools
>>> list(itertools.product(a,b,c))
[(1, 4, 8), (1, 4, 9), (1, 5, 8), (1, 5, 9), (1, 6, 8), (1, 6, 9), (1, 7, 8), (1, 7, 9),
 (2, 4, 8), (2, 4, 9), (2, 5, 8), (2, 5, 9), (2, 6, 8), (2, 6, 9), (2, 7, 8), (2, 7, 9),
 (3, 4, 8), (3, 4, 9), (3, 5, 8), (3, 5, 9), (3, 6, 8), (3, 6, 9), (3, 7, 8), (3, 7, 9)]

所以要迭代并对数字进行处理,你可以说

for i, j, k in itertools.product(a,b,c):
    # do stuff with i,j,k

答案 1 :(得分:0)

您的嵌套for循环会创建列表产品,因此您可以使用itertools.product代替!

>>> import itertools

>>> list(itertools.product([1, 2, 3],[4, 5, 6, 7],[8, 9]))
[(1, 4, 8), (1, 4, 9), (1, 5, 8), (1, 5, 9), (1, 6, 8), (1, 6, 9), (1, 7, 8), (1, 7, 9), (2, 4, 8), (2, 4, 9), (2, 5, 8), (2, 5, 9), (2, 6, 8), (2, 6, 9), (2, 7, 8), (2, 7, 9), (3, 4, 8), (3, 4, 9), (3, 5, 8), (3, 5, 9), (3, 6, 8), (3, 6, 9), (3, 7, 8), (3, 7, 9)]

如果您希望将结果作为列表,请使用map

>>> map(list,itertools.product([1, 2, 3],[4, 5, 6, 7],[8, 9]))
[[1, 4, 8], [1, 4, 9], [1, 5, 8], [1, 5, 9], [1, 6, 8], [1, 6, 9], [1, 7, 8], [1, 7, 9], [2, 4, 8], [2, 4, 9], [2, 5, 8], [2, 5, 9], [2, 6, 8], [2, 6, 9], [2, 7, 8], [2, 7, 9], [3, 4, 8], [3, 4, 9], [3, 5, 8], [3, 5, 9], [3, 6, 8], [3, 6, 9], [3, 7, 8], [3, 7, 9]]