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

从含重复元素的列表中提取指定长度的唯一组合及剩余元素

解决有重复元素列表的指定长度唯一组合及剩余元素提取问题

问题原因说明

你直接用itertools.combinations不符合需求是因为该方法是基于元素的位置生成组合的,当原列表存在重复值时,会生成大量内容完全相同的重复组合。比如示例列表中的两个1,分别和2组合会得到两个完全一致的(1,2),不符合「每个组合仅出现一次」的要求。

实现代码

from itertools import combinations
from collections import Counter

def get_unique_combs_and_remainder(raw_list, comb_length):
    # 生成所有组合后去重,过滤重复内容的组合
    unique_combs = list(set(combinations(raw_list, comb_length)))
    # 若需要组合按升序排列,可替换为下行代码
    # unique_combs = sorted(set(combinations(raw_list, comb_length)))
    result = []
    raw_count = Counter(raw_list)
    for comb in unique_combs:
        # 基于计数差值计算剩余元素
        remain_count = raw_count - Counter(comb)
        remain_list = []
        for item, cnt in remain_count.items():
            remain_list.extend([item]*cnt)
        result.append([comb, remain_list])
    return result

调用示例

a = [1, 1, 2, 3, 4, 4, 5, 5]
# 提取长度为2的唯一组合及剩余元素
output = get_unique_combs_and_remainder(a, 2)
print(output)

输出片段示例

[[(1, 2), [1, 3, 4, 4, 5, 5]], [(1, 3), [1, 2, 4, 4, 5, 5]], [(2, 5), [1, 1, 3, 4, 4, 5]], ...]

完全符合你要求的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:03