给定一个Python(或Java,我正在尝试用两种语言执行此操作)中的列表,鉴于每个分组必须至少具有一定的大小,如何获得将列表拆分为不同分组的所有不同方法?我认为获得分割位置的组合是最好的方法。
列表的示例输入和最小大小为
[1,2,3], 2
相应的输出应该是
[[1,2], [1,3], [2,3], [1,2,3]]
最佳答案
在 Python 中,您可以递归地执行此操作:
def partition(lst, minsize=1):
yield [lst]
for n in range(minsize, len(lst)-minsize+1):
for p in partition(lst[n:], minsize):
yield [lst[:n]] + [l for l in p]
例如:
>>> lst = [1, 2, 3, 4, 5, 6, 7]
>>> partition(lst, 3)
[[[1, 2, 3, 4, 5, 6, 7]],
[[1, 2, 3], [4, 5, 6, 7]],
[[1, 2, 3, 4], [5, 6, 7]]]
>>> list(partition(lst, 2))
[[[1, 2, 3, 4, 5, 6, 7]], [[1, 2], [3, 4, 5, 6, 7]],
[[1, 2], [3, 4], [5, 6, 7]], [[1, 2], [3, 4, 5], [6, 7]],
[[1, 2, 3], [4, 5, 6, 7]], [[1, 2, 3], [4, 5], [6, 7]],
[[1, 2, 3, 4], [5, 6, 7]], [[1, 2, 3, 4, 5], [6, 7]]]
关于java - 如何获得至少一定大小的列表分组的所有组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21835204/