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

如何基于含有限重复元素的列表生成指定长度的合法组合?

Python 三元组提取解决方案

你对itertools.combinations的功能存在误解,这个函数本身就可以满足你的需求。
itertools.combinations是基于元素位置索引生成不重复组合,仅限制选中的位置不重复,不会对元素的值做去重限制,完全适配你列表中存在重复值、但不能超出现有重复值数量的要求。

实现代码

import itertools

my_list = [-1, 0, 2, 0]
# 生成所有三元组组合,返回元组格式
triples = itertools.combinations(my_list, 3)
# 转为嵌套列表格式
result = [list(item) for item in triples]
print(result)

输出结果

[[-1, 0, 2], [-1, 0, 0], [-1, 2, 0], [0, 2, 0]]

完全匹配你的预期输出,也不会出现[0,0,0]这类无效结果:因为原列表只有2个值为0的元素,最多只能同时选中2个0的位置,不可能生成包含3个0的三元组。

可选:按值去重

如果你需要把值相同、顺序不同的三元组视为同一个(比如认为[-1,0,2]和[-1,2,0]是同一种组合),可以增加去重逻辑:

unique_result = [list(item) for item in {tuple(sorted(t)) for t in itertools.combinations(my_list, 3)}]
print(unique_result)
# 输出:[[-1, 0, 0], [-1, 0, 2]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:12:02