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

如何用Python实现列表的无重复元素组合抽样?

实现方法

你要生成的其实是列表的所有非空无序子集,可以用以下两种常见方式实现:

方法一:使用标准库itertools.combinations

itertools.combinations可以生成指定长度的所有无序不重复元素组合,遍历从1到列表长度的所有可能长度,就能收集到所有非空子集:

import itertools

L = ['a', 'b', 'c']
# 列表推导式简洁实现
result = [list(comb) for length in range(1, len(L)+1) 
          for comb in itertools.combinations(L, length)]

print(result)
# 输出:[['a'], ['b'], ['c'], ['a', 'b'], ['a', 'c'], ['b', 'c'], ['a', 'b', 'c']]

如果喜欢分步写法更清晰:

import itertools

L = ['a', 'b', 'c']
result = []
# 遍历1到列表长度的所有子集长度
for length in range(1, len(L)+1):
    # 生成当前长度的所有组合,转成列表后加入结果
    for comb in itertools.combinations(L, length):
        result.append(list(comb))

print(result)

方法二:位运算实现(无需导入库)

利用二进制数表示元素的选中状态:n个元素对应n位二进制,从1到2^n -1的所有数(排除全0的空集),每一位对应是否选中列表中的对应元素:

L = ['a', 'b', 'c']
n = len(L)
result = []

# 遍历所有非空状态(mask从1到2^n -1)
for mask in range(1, 1 << n):
    # 检查每一位是否为1,选中对应元素
    subset = [L[i] for i in range(n) if mask & (1 << i)]
    result.append(subset)

print(result)
# 输出:[['a'], ['b'], ['a', 'b'], ['c'], ['a', 'c'], ['b', 'c'], ['a', 'b', 'c']]

注:位运算方法的输出顺序和预期略有不同,但所有子集都存在,若需要和预期顺序一致,可对结果进行排序(按子集长度+元素顺序)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:35:22