例如
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 ...
我想定义一个函数可以打印它们但不使用嵌套的。
怎么做?
答案 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]]