Poy*_*han 5 python partitioning list
我有一个列表,如:
lst = [1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
并且我想在不更改列表顺序的情况下获得给定 n 存储桶的所有拆分的组合。n=3 时的输出 exp:
[
[1],[2],[3,4,5,6,7,8,9,10],
[1],[2,3],[4,5,6,7,8,9,10],
[1],[2,3,4],[5,6,7,8,9,10],
.
.
.
[1,2,3,4,5,6,7,8],[9],[10],
]
Run Code Online (Sandbox Code Playgroud)
Python 是我使用的语言,但如果你能指导我使用一种也很好的算法。我看到这个问题通常出现在字符串上。但是在列表中无法弄清楚。
PS这是我的第一个问题。任何关于如何改进问题的反馈表示赞赏。
尝试:
from itertools import product
def generate(n, l):
for c in product(range(1, l), repeat=n - 1):
s = sum(c)
if s > l - 1:
continue
yield *c, l - s
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = 3
for groups in generate(n, len(lst)):
l, out = lst, []
for g in groups:
out.append(l[:g])
l = l[g:]
print(out)
Run Code Online (Sandbox Code Playgroud)
印刷:
[[1], [2], [3, 4, 5, 6, 7, 8, 9, 10]]
[[1], [2, 3], [4, 5, 6, 7, 8, 9, 10]]
[[1], [2, 3, 4], [5, 6, 7, 8, 9, 10]]
[[1], [2, 3, 4, 5], [6, 7, 8, 9, 10]]
[[1], [2, 3, 4, 5, 6], [7, 8, 9, 10]]
[[1], [2, 3, 4, 5, 6, 7], [8, 9, 10]]
[[1], [2, 3, 4, 5, 6, 7, 8], [9, 10]]
[[1], [2, 3, 4, 5, 6, 7, 8, 9], [10]]
[[1, 2], [3], [4, 5, 6, 7, 8, 9, 10]]
[[1, 2], [3, 4], [5, 6, 7, 8, 9, 10]]
[[1, 2], [3, 4, 5], [6, 7, 8, 9, 10]]
[[1, 2], [3, 4, 5, 6], [7, 8, 9, 10]]
[[1, 2], [3, 4, 5, 6, 7], [8, 9, 10]]
[[1, 2], [3, 4, 5, 6, 7, 8], [9, 10]]
[[1, 2], [3, 4, 5, 6, 7, 8, 9], [10]]
[[1, 2, 3], [4], [5, 6, 7, 8, 9, 10]]
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
[[1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
[[1, 2, 3], [4, 5, 6, 7, 8], [9, 10]]
[[1, 2, 3], [4, 5, 6, 7, 8, 9], [10]]
[[1, 2, 3, 4], [5], [6, 7, 8, 9, 10]]
[[1, 2, 3, 4], [5, 6], [7, 8, 9, 10]]
[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]
[[1, 2, 3, 4], [5, 6, 7, 8, 9], [10]]
[[1, 2, 3, 4, 5], [6], [7, 8, 9, 10]]
[[1, 2, 3, 4, 5], [6, 7], [8, 9, 10]]
[[1, 2, 3, 4, 5], [6, 7, 8], [9, 10]]
[[1, 2, 3, 4, 5], [6, 7, 8, 9], [10]]
[[1, 2, 3, 4, 5, 6], [7], [8, 9, 10]]
[[1, 2, 3, 4, 5, 6], [7, 8], [9, 10]]
[[1, 2, 3, 4, 5, 6], [7, 8, 9], [10]]
[[1, 2, 3, 4, 5, 6, 7], [8], [9, 10]]
[[1, 2, 3, 4, 5, 6, 7], [8, 9], [10]]
[[1, 2, 3, 4, 5, 6, 7, 8], [9], [10]]
Run Code Online (Sandbox Code Playgroud)