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

Python如何获取列表中长度≥2的所有可能组合

实现方案

你需要的是给定列表所有长度≥2、元素不重复、不计顺序的组合,本质是枚举列表所有大小≥2的子集,以下是具体实现方法:


Python 最简实现

直接用标准库itertools自带的combinations方法生成即可,该方法原生支持生成不重复、不计顺序的指定长度组合:

from itertools import combinations

def get_target_combinations(input_list):
    result = []
    # 遍历所有符合要求的组合长度:从2到列表总长度
    for length in range(2, len(input_list) + 1):
        # 把生成的元组转成列表,批量加入结果
        result.extend(list(combo) for combo in combinations(input_list, length))
    return result

# 测试用例
test_list = [1,2,3,4]
print(get_target_combinations(test_list))

运行输出和你要求的结果完全一致:
[[1,2], [1,3], [1,4], [2,3], [2,4], [3,4], [1,2,3], [1,2,4], [1,3,4], [2,3,4], [1,2,3,4]]


无依赖手动实现

如果不想依赖标准库,可以用回溯法自行实现,逻辑可以跨语言复用:

def get_target_combinations(input_list):
    result = []
    def backtrack(start_index, current_path):
        # 只要当前组合长度≥2就存入结果
        if len(current_path) >= 2:
            result.append(current_path.copy())
        # 从start_index往后遍历,避免生成重复的逆序组合
        for i in range(start_index, len(input_list)):
            current_path.append(input_list[i])
            backtrack(i + 1, current_path)
            current_path.pop()
    backtrack(0, [])
    return result

注意事项

这种组合的总数量为2^n - n - 1(n为原列表长度),属于指数级复杂度,n超过20时计算量会大幅上涨,注意控制输入列表的规模。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:03