python - 以各种可能的方式连接列表元素

python - Concatenate list elements in every possible way

我的问题可能很难解释(也许这也是我没有找到解决方案或类似问题的原因)。

我有一个包含一些元素的列表(在我的特定情况下也列出)。 我想要的是以相同顺序排列此列表的所有可能串联组合。

例如:

[[1], [2], [3], [4]]  # what I have

{                     # what I want
    [[1], [2], [3], [4]],
    [[1, 2], [3], [4]],
    [[1], [2, 3], [4]],
    [[1], [2], [3, 4]],
    [[1, 2], [3, 4]],  # Update 1
    [[1, 2, 3], [4]],
    [[1], [2, 3, 4]],
    [[1, 2, 3, 4]]
}

一般子列表的长度大于1;列表本身也可能有 4 个以上的元素。

非常感谢任何帮助。

更新 1: 在代码中添加了缺失的组合。

试试这个:

def concats(l):
    if len(l) < 2:
        return [l]

    return [[l[0]] + x for x in concats(l[1:])] + \
           concats([l[0] + l[1]] + l[2:])

这是一个示例案例:

l = [[1], [2], [3], [4]]
r = concats(l)

结果:

[[[1], [2], [3], [4]],
 [[1], [2], [3, 4]],
 [[1], [2, 3], [4]],
 [[1], [2, 3, 4]],
 [[1, 2], [3], [4]],
 [[1, 2], [3, 4]],
 [[1, 2, 3], [4]],
 [[1, 2, 3, 4]]]

编辑:我不清楚应该如何处理空列表,但在那种情况下,您可能只想 return 一个空列表而不将其包装在外部列表中 - 我会把那个案子留给你。函数顶部的简单检查可以按照您选择的任何方式处理它(并且不会影响较大的情况)。