python - 从有序列表递归生成组合

标签 python algorithm list recursion combinatorics

给定一个包含“n”个元素的有序列表,我想对列表进行切片以仅生成子列表的每个不同排列一次,同时保持原始列表的顺序 - 即生成每个 Composition我的输入列表。 (这与从我的输入列表中计算可能的子列表的每个可能组合不同)。

例如,给定输入列表[A,B,C,D],我的输出将是以下 8 个嵌套列表:

[[A,B,C,D]], [[A,B,C],[D]], [[A,B],[C,D]], [[A,B],[C],[D]], [[A],[B,C],[D]], [[A],[B],[C,D]], [A,[B,C,D]], [[A],[B],[C],[D]].

绘制一棵可能排列的树表明这个问题将适用于递归算法,但我不确定如何在 Python 中实现它以获得最大速度和效率,非常感谢您的建议和指导。

最佳答案

def composition(seq):
    seq = tuple(seq)
    for i in range(2**(len(seq)-1)):
        result = [[seq[0]]]
        for j in range(len(seq)-1):
            if i & (1<<j):
                result.append([seq[j+1]])
            else:
                result[-1].append(seq[j+1])
        yield result

if __name__=="__main__":
    from pprint import pprint
    pprint(list(composition('ABCD')))

引用:https://en.wikipedia.org/wiki/Composition_(combinatorics)

关于python - 从有序列表递归生成组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32196521/

相关文章:

database - 多标准搜索算法

algorithm - 生产者-消费者,为什么不用一个信号量来实现呢?

python - 指定的列表理解

python - 如何检查对象的类型为 'dict_items' ?

python - 如何从 Fabric 中的终端命令行为多个主机提供 ssh key

algorithm - 使用算法制作动画 GIF 的最佳方法是什么?

java - 当我显示列表中的元素时,它们就在那里,但是当我想在方法中使用列表时,没有显示任何内容

Python - 从Azure服务总线主题接收非常慢

Python BeautifulSoup 提取字体标签的内容

python - 列表理解结合 2 个列表