python-从项目和次数代表中找到可能的组合

时间:2019-01-03 08:44:06

标签: python list math combinations

我有一本字典,其中包含项目以及每个项目的代表次数,例如:

{A: 3, B: 1}

我正在寻找一种获取所有可能的不同组合的方法, 顺序无关紧要:[AB][BA]相同。

所需的输出是:

[A, AA, AAA, B, AB, AAB, AAAB]

1 个答案:

答案 0 :(得分:0)

这是一种使用列表推导和itertools.product的方式:

from itertools import product, chain
d = {'A': 3, 'B': 1}
l = [[k*i for i in range(1,v+1)] for k, v in d.items()]
[''.join(element) for element in product(*l)] + list(chain.from_iterable(l))

输出:

['AB', 'AAB', 'AAAB', 'A', 'AA', 'AAA', 'B']

详细信息:

第一个列表理解的结果是一个嵌套列表,其中每个子列表具有从keys到对应的1重复的字典中包含的每个value

[['A', 'AA', 'AAA'], ['B']]

第二个,使用itertools.product执行笛卡尔乘积,每个乘积joined组成一个字符串。最后,使用l添加了chain.from_iterable的扁平版本:

print(list(chain.from_iterable(l)))
['A', 'AA', 'AAA', 'B']

[''.join(element) for element in product(*l)]
['AB', 'AAB', 'AAAB']