java - 如何获得至少一定大小的列表分组的所有组合?

标签 java python split combinations

给定一个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/

相关文章:

java - 使用 SpannableString 长按 TextView 时出现 NullPointerException

java - 为什么这段代码会生成不正确的数据?

python - Django python - 找不到模块

python - 获取 pandas DataFrame 中某一行的最大值的列名

java - 如何将标点符号从字符串末尾移动到开头?

GNU/Linux 上的 Java 数据库连接

python - 在 django 中找不到已安装的应用程序

Python正则表达式分隔以括号中的数字结尾的字符串

python - 使用 Pandas 从数据框的所有项目中删除字符串

java - 帮助谷歌安卓