使用itertools.product来处理嵌套列表

时间:2018-09-16 10:16:26

标签: python

测试代码:

import itertools

def main():
    I=[1,2,3,4]
    J=['A','B','C','D']
    K=['a','b','c','d']
    L=[I,J,K]

当我使用

print (list(itertools.product(I,J,K)))

效果很好,结果是

[(1, 'A', 'a'), (1, 'A', 'b'), (1, 'A', 'c'), (1, 'A', 'd'), (1, 'B', 'a'), (1, 'B', 'b'), (1, 'B', 'c'), (1, 'B', 'd'), (1, 'C', 'a'), (1, 'C', 'b'), (1, 'C', 'c'), (1, 'C', 'd'), (1, 'D', 'a'), (1, 'D', 'b'), (1, 'D', 'c'), (1, 'D', 'd'), (2, 'A', 'a'), (2, 'A', 'b'), (2, 'A', 'c'), (2, 'A', 'd'), (2, 'B', 'a'), (2, 'B', 'b'), (2, 'B', 'c'), (2, 'B', 'd'), (2, 'C', 'a'), (2, 'C', 'b'), (2, 'C', 'c'), (2, 'C', 'd'), (2, 'D', 'a'), (2, 'D', 'b'), (2, 'D', 'c'), (2, 'D', 'd'), (3, 'A', 'a'), (3, 'A', 'b'), (3, 'A', 'c'), (3, 'A', 'd'), (3, 'B', 'a'), (3, 'B', 'b'), (3, 'B', 'c'), (3, 'B', 'd'), (3, 'C', 'a'), (3, 'C', 'b'), (3, 'C', 'c'), (3, 'C', 'd'), (3, 'D', 'a'), (3, 'D', 'b'), (3, 'D', 'c'), (3, 'D', 'd'), (4, 'A', 'a'), (4, 'A', 'b'), (4, 'A', 'c'), (4, 'A', 'd'), (4, 'B', 'a'), (4, 'B', 'b'), (4, 'B', 'c'), (4, 'B', 'd'), (4, 'C', 'a'), (4, 'C', 'b'), (4, 'C', 'c'), (4, 'C', 'd'), (4, 'D', 'a'), (4, 'D', 'b'), (4, 'D', 'c'), (4, 'D', 'd')]

但是当我使用

print (list(itertools.product(L)))

结果是

[([1, 2, 3, 4],), (['A', 'B', 'C', 'D'],), (['a', 'b', 'c', 'd'],)]

那不是我想要的

如果L是一个嵌套列表,并且我想使用每个子列表中的元素进行组合怎么办?

我尝试了

print (list(itertools.product(i for i in L)))

但不起作用

PS:请不要告诉我使用print (list(itertools.product(L[0],L[1],L[2]))) 当L中有大量元素时,我们无法列出所有元素

++++++++++++++++++++++++ EDIT ++++++++++++++++++++++++++++

好吧,我找到了答案

正确的是

import itertools

def main():
    I=[1,2,3,4]
    J=['A','B','C','D']
    K=['a','b','c','d']
    L=[I,J,K]
    print (list(itertools.product(*L)))

main()

参考: https://docs.python.org/2/library/itertools.html

0 个答案:

没有答案