python从item和rep的数量中找到可能的组合

2024-09-29 01:38:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,里面有项目和每个项目的重复次数,例如:

{A: 3, B: 1}

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

想要的输出是:

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

Tags: 项目方法字典ab顺序次数aaba
1条回答
网友
1楼 · 发布于 2024-09-29 01:38:36

下面是一种使用列表理解和^{}的方法:

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']

详细信息:

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

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

第二个,使用^{}执行笛卡尔积,每个积joined成为一个字符串。最后,使用chain.from_iterable添加l的扁平版本:

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

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

相关问题 更多 >