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 一个空列表而不将其包装在外部列表中 - 我会把那个案子留给你。函数顶部的简单检查可以按照您选择的任何方式处理它(并且不会影响较大的情况)。
我的问题可能很难解释(也许这也是我没有找到解决方案或类似问题的原因)。
我有一个包含一些元素的列表(在我的特定情况下也列出)。 我想要的是以相同顺序排列此列表的所有可能串联组合。
例如:
[[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 一个空列表而不将其包装在外部列表中 - 我会把那个案子留给你。函数顶部的简单检查可以按照您选择的任何方式处理它(并且不会影响较大的情况)。