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

Python不使用itertools获取列表元素所有长度任意组合的实现方法

非连续全组合生成方案

你现有代码的问题是生成的是列表的连续子序列,无法覆盖[1,3]这类非连续元素的组合。这里给出位运算实现方案,无需引入第三方库:

def get_combination(list_of_palindrome):
    n = len(list_of_palindrome)
    res = []
    # 遍历所有非空选择状态,1 << n 等价于 2**n
    for mask in range(1, 1 << n):
        current = []
        for idx in range(n):
            # 检查当前位是否被选中
            if mask & (1 << idx):
                current.append(list_of_palindrome[idx])
        res.append(current)
    return res

实现逻辑说明:

  • 长度为n的列表,每个元素有「选/不选」两种状态,刚好可以用长度为n的二进制数(掩码)表示所有选择可能
  • 遍历范围从1到2^n -1,跳过掩码为0对应的空集,刚好覆盖所有非空组合场景
  • 每个掩码对应一个组合:掩码第idx位为1时,就把列表第idx个元素加入当前组合

调用get_combination([1,2,3])即可得到你需要的所有非空组合,不需要字典序的话可直接使用,有排序需求可以对返回结果再做排序处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:05