与重复的组合

Combinations with repetitions

使用itertools.combinations(或任何其他函数)我想知道有多少组合可以满足以下要求:

所以每个数组是:

A = ['A', 'A', 'A', 'A', 'A']
B = ['B', 'B', 'B', 'B', 'B', 'B']
C = ['C', 'C', 'C', 'C', 'C', 'C', 'C']
D = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D']

例如,组合为:('A', 'A', 'A', 'A', 'A')('A', 'D', 'D', 'B', 'C')。订单无关紧要。 我该怎么做?

将所有四个列表添加到一个列表中,然后将参数设置为combinations函数。您还可以将所有列表添加到 combination 函数中。

from itertools import combinations

A = ['A', 'A', 'A', 'A', 'A']
B = ['B', 'B', 'B', 'B', 'B', 'B']
C = ['C', 'C', 'C', 'C', 'C', 'C', 'C']
D = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D']

comb = combinations(A+B+C+D, 5) 
for c in comb:
  print(c)

既然你提到顺序无关紧要,我认为对于你的例子,正确答案应该只产生 56 组合。

你可以使用这个:

from itertools import combinations_with_replacement

combi = list(combinations_with_replacement(set(A+B+C+D), 5))

对于您的示例,使用此解决方案,print(len(combi))print(combi) 产生以下输出:

56

[('C', 'C', 'C', 'C', 'C'),
 ('C', 'C', 'C', 'C', 'A'),
 ('C', 'C', 'C', 'C', 'B'),
 ('C', 'C', 'C', 'C', 'D'),
 ('C', 'C', 'C', 'A', 'A'),
 ('C', 'C', 'C', 'A', 'B'),
 ('C', 'C', 'C', 'A', 'D'),
 ('C', 'C', 'C', 'B', 'B'),
 ('C', 'C', 'C', 'B', 'D'),
 ('C', 'C', 'C', 'D', 'D'),
 ('C', 'C', 'A', 'A', 'A'),
 ('C', 'C', 'A', 'A', 'B'),
 ('C', 'C', 'A', 'A', 'D'),
 ('C', 'C', 'A', 'B', 'B'),
 ('C', 'C', 'A', 'B', 'D'),
 ('C', 'C', 'A', 'D', 'D'),
 ('C', 'C', 'B', 'B', 'B'),
 ('C', 'C', 'B', 'B', 'D'),
 ('C', 'C', 'B', 'D', 'D'),
 ('C', 'C', 'D', 'D', 'D'),
 ('C', 'A', 'A', 'A', 'A'),
 ('C', 'A', 'A', 'A', 'B'),
 ('C', 'A', 'A', 'A', 'D'),
 ('C', 'A', 'A', 'B', 'B'),
 ('C', 'A', 'A', 'B', 'D'),
 ('C', 'A', 'A', 'D', 'D'),
 ('C', 'A', 'B', 'B', 'B'),
 ('C', 'A', 'B', 'B', 'D'),
 ('C', 'A', 'B', 'D', 'D'),
 ('C', 'A', 'D', 'D', 'D'),
 ('C', 'B', 'B', 'B', 'B'),
 ('C', 'B', 'B', 'B', 'D'),
 ('C', 'B', 'B', 'D', 'D'),
 ('C', 'B', 'D', 'D', 'D'),
 ('C', 'D', 'D', 'D', 'D'),
 ('A', 'A', 'A', 'A', 'A'),
 ('A', 'A', 'A', 'A', 'B'),
 ('A', 'A', 'A', 'A', 'D'),
 ('A', 'A', 'A', 'B', 'B'),
 ('A', 'A', 'A', 'B', 'D'),
 ('A', 'A', 'A', 'D', 'D'),
 ('A', 'A', 'B', 'B', 'B'),
 ('A', 'A', 'B', 'B', 'D'),
 ('A', 'A', 'B', 'D', 'D'),
 ('A', 'A', 'D', 'D', 'D'),
 ('A', 'B', 'B', 'B', 'B'),
 ('A', 'B', 'B', 'B', 'D'),
 ('A', 'B', 'B', 'D', 'D'),
 ('A', 'B', 'D', 'D', 'D'),
 ('A', 'D', 'D', 'D', 'D'),
 ('B', 'B', 'B', 'B', 'B'),
 ('B', 'B', 'B', 'B', 'D'),
 ('B', 'B', 'B', 'D', 'D'),
 ('B', 'B', 'D', 'D', 'D'),
 ('B', 'D', 'D', 'D', 'D'),
 ('D', 'D', 'D', 'D', 'D')]