我有三组

[1,2] [4,5] [a,b]

我想要这样的排列/组合
1  4  a
1  5  a
1  4  b
1  5  b
2  4  a
2  5  a
2  4  b
2  5  b
12 4  a
12 5  a
12 4  b
12 5  b
12 4  ab
12 5  ab
1  45 a
2  45 a
1  45 b
2  45 b
1  45 ab
2  45 ab
1  4  ab
2  5  ab
12 45 ab

这个数组可以增长,并且不会一直是相同的大小,因此排列将增加。
到目前为止我已经知道了。
from itertools import *

bag1 = [1, 2]
bag2 = [4, 5]
bag3  = ['a', 'b']

bags = []

bags.append(bag1)
bags.append(bag2)
bags.append(bag3)

comb = list(product(*bags))

最佳答案

考虑到你的代码,你需要使用笛卡尔积(积),对所有可能的组合你的开始'袋':

from itertools import product, combinations

def comb_bag( bag):
    new_bag = []
    for n in range( 1, 1+len(bag)):
        new_bag += list( combinations(bag, n))

    return new_bag

bag1 = [1, 2]
bag2 = [4, 5]
bag3  = ['a', 'b']

bags = []

new_bag1 = comb_bag( bag1)
new_bag2 = comb_bag( bag2)
new_bag3 = comb_bag( bag3)

bags.append(new_bag1)
bags.append(new_bag2)
bags.append(new_bag3)

comb = list(product(*bags))

for e in comb:
    print( e)

关于python - 如何在python中动态获取组的组合/排列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53658956/

10-12 23:36