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

Python递归实现列表按指定长度拆分的所有组合方案

实现思路

核心递归逻辑是按拆分规则逐段生成组合:

  1. 每一轮取当前拆分规则的第一个长度k,从剩余可选元素中选出所有大小为k的不重复组合
  2. 对每个选出的组合,将剩余元素和剩下的拆分规则传入下一层递归处理
  3. 递归终止条件:所有拆分规则都处理完成,返回空组合作为拼接基础
    为了避免输入列表有重复元素时判断错误,我们基于索引处理组合生成,最后再映射回原列表的元素值。
最优递归代码实现
import itertools

def get_combos(x, splits):
    # 内部递归函数,基于索引处理避免重复元素干扰
    def recursive_helper(available_indices, remaining_splits):
        # 递归终止:没有需要拆分的段了
        if not remaining_splits:
            return [[]]
        result = []
        current_seg_length = remaining_splits[0]
        # 枚举所有长度符合要求的索引组合
        for seg_indices in itertools.combinations(available_indices, current_seg_length):
            # 过滤得到剩余可选的索引
            left_indices = [idx for idx in available_indices if idx not in seg_indices]
            # 递归处理剩余拆分
            for sub_combos in recursive_helper(left_indices, remaining_splits[1:]):
                # 把索引转为原列表的元素,和后续结果拼接
                current_seg = tuple(x[i] for i in seg_indices)
                result.append([current_seg] + sub_combos)
        return result

    return recursive_helper(list(range(len(x))), splits)
验证说明

测试示例输入:

if __name__ == "__main__":
    res = get_combos([0, 1, 2, 3], [1, 2, 1])
    for item in res:
        print(item)

输出和题目给出的示例完全一致,共12组结果,符合要求。该实现的时间复杂度和所有合法组合的总数正相关,没有冗余计算,是最优的递归实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:00