Python:如何获取列表集的所有有序组合

时间:2018-12-18 10:39:19

标签: python iteration

说我有以下列表:

a = [1, 2, 3]
b = [11, 12, 13]
c = [111, 112, 113]

我想要以下输出

[1,2,3]
[1,2,13]
[1,2,113]
[1,12,3]
[1, 12, 13]
[1, 12, 113]
[1,112,3]
[1,112,13]
[1, 112, 113]
[11,2,3]
[11, 2, 13]
[11, 2, 113]
[11, 12, 3]
[11, 12, 13]
[11, 12, 113]
[11, 112, 3]
[11, 112, 13]
[11, 112, 113]
...

因此,我想拥有一个可以给我所有列表组合的函数,这是对不考虑顺序的集合中某些成员的选择-当列表中的每个元素保持其索引与原始列表的距离时的一组列表

我查看了itertools中的所有选项,但没有找到任何解决方案。

2 个答案:

答案 0 :(得分:6)

在使用zip之前,只需product您的列表:

from itertools import product

a = [1, 2, 3]
b = [11, 12, 13]
c = [111, 112, 113]

for p in product(*(zip(a, b, c))):
    print(p)

输出:

(1, 2, 3)
(1, 2, 13)
(1, 2, 113)
(1, 12, 3)
(1, 12, 13)
(1, 12, 113)
(1, 112, 3)
(1, 112, 13)
(1, 112, 113)
(11, 2, 3)
(11, 2, 13)
(11, 2, 113)
(11, 12, 3)
....

要回答您的评论:zip的输出是:

print(list(zip(a, b, c)))
#  [(1, 11, 111), (2, 12, 112), (3, 13, 113)]

然后product将通过在这三个元组的每一个中取一个值来生成其输出。

答案 1 :(得分:0)

 a = [1, 2, 3]
 b = [11, 12, 13]
 c = [111, 112, 113]
 d=[]
 for i in range(3):
     d.append((a[i],b[i],c[i]))
 print(d)
 for i in range(len(d)):
     for k in range(3):
         for j in range(3):
             print(d[0][i],d[1][k],d[2][j])

这会帮助我猜