首页 > 解决方案 > 与重复的组合

问题描述

使用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')。顺序无关紧要。我怎么能那样做?

标签: pythonpython-3.xcombinationsitertools

解决方案


既然您提到顺序无关紧要,我认为对于您的示例,正​​确的答案应该只产生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')]

推荐阅读