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

Python:如何查找列表中的所有加法逆对并将其移除?

移除列表加法逆对的Python实现

实现思路

  • 首先统计列表中每个数值的出现次数
  • 遍历所有数值,对存在加法逆的数值进行配对抵消,更新剩余计数
  • 按照原列表的顺序输出剩余计数大于0的数值,保证结果顺序和原始列表中数值出现顺序一致

完整代码实现

from collections import defaultdict

def remove_inverse_pairs(lst):
    # 统计每个数值的出现次数
    count = defaultdict(int)
    for num in lst:
        count[num] += 1
    
    visited = set()
    for num in list(count.keys()):
        if num in visited or num == 0:
            continue
        inverse = -num
        if inverse not in count:
            continue
        # 计算可配对的数量
        pair_num = min(count[num], count[inverse])
        count[num] -= pair_num
        count[inverse] -= pair_num
        # 标记已处理避免重复计算
        visited.add(num)
        visited.add(inverse)
    
    # 可选:处理0的情况,0的加法逆是自身,每两个抵消一次
    # if 0 in count:
    #     count[0] = count[0] % 2
    
    # 按原顺序生成结果
    res = []
    for num in lst:
        if count[num] > 0:
            res.append(num)
            count[num] -= 1
    return res

测试效果

# 测试用例
lst1 = [326, -326, 336, -336, 336]
lst2 = [-35, 35, 838, -838, 440]
lst3 = [544, -544, 544]
lst4 = [-25, 25, 32, -32, -32, 56, 79]

print(remove_inverse_pairs(lst1)) # 输出 [336]
print(remove_inverse_pairs(lst2)) # 输出 [440]
print(remove_inverse_pairs(lst3)) # 输出 [544]
print(remove_inverse_pairs(lst4)) # 输出 [-32, 56, 79]

补充说明

如果需要处理数值为0的场景,可以取消代码中0处理部分的注释,规则为每两个0抵消,剩余的0会保留在结果中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:36:10