You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成列表的所有最大长度不超过5的子集划分?

生成列表所有长度不超过指定值的子列表划分

你需要的是生成一个列表的所有可能划分,要求每个子列表的长度不超过5(可以是1到5之间的任意长度),这类问题适合用递归回溯的方式解决——每一步从当前位置开始,选择截取1到5个元素作为一个子列表,然后递归处理剩余的元素,直到整个列表被完全划分。

实现代码

以下是可直接运行的Python示例:

def generate_all_partitions(lst, max_len):
    partitions = []
    # 递归回溯的辅助函数
    def helper(current_part, remaining_items):
        if not remaining_items:
            partitions.append(current_part.copy())
            return
        # 每次最多取max_len个元素,不能超过剩余元素的总数
        take_count = min(max_len, len(remaining_items))
        for i in range(1, take_count + 1):
            current_part.append(remaining_items[:i])
            helper(current_part, remaining_items[i:])
            current_part.pop()  # 回溯,尝试下一种截取长度

    helper([], lst)
    return partitions

# 测试你的示例列表
original_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
all_partitions = generate_all_partitions(original_list, 5)

# 打印几个你提到的示例划分
print("部分符合要求的划分:")
target_partitions = [
    [[10,20,30,40,50],[60,70,80,90,100],[110]],
    [[10],[20,30,40,50],[60,70],[80,90,100,110]],
    [[10],[20],[30],[40],[50],[60],[70],[80],[90,100],[110]]
]
for p in target_partitions:
    print(p)

代码说明

  • generate_all_partitions函数接收原始列表和子列表最大长度(这里是5),返回所有合法划分结果。
  • 内部helper函数通过回溯逻辑生成划分:每次从剩余元素开头截取1到max_len个元素加入当前划分,递归处理剩余元素;处理完成后回溯(移除最后加入的子列表),尝试下一种截取长度。
  • 当剩余元素为空时,说明得到一个完整划分,将其存入结果列表。

注意事项

当原始列表长度较长时,所有可能的划分数量会指数级增长(比如11个元素的列表,划分总数非常庞大),实际使用时需考虑是否真的需要生成全部结果,或是否可以添加额外约束来缩小范围。

内容的提问来源于stack exchange,提问作者mathquester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:32:09