我有一本字典,其中包含项目以及每个项目的代表次数,例如:
{A: 3, B: 1}
我正在寻找一种获取所有可能的不同组合的方法,
顺序无关紧要:[AB]
与[BA]
相同。
所需的输出是:
[A, AA, AAA, B, AB, AAB, AAAB]
答案 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']