【问题标题】:python - find possible combination from item and number of Number of reps [duplicate]python - 从项目和代表数量中找到可能的组合[重复]
【发布时间】:2019-01-03 08:44:06
【问题描述】:

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

{A: 3, B: 1}

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

想要的输出是:

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

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python list math combinations


【解决方案1】:

这是一种使用列表推导和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成一个字符串。最后使用chain.from_iterable添加了一个扁平化版本的l

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多