You need to enable JavaScript to run this app. Counter对象执行减法运算如何保留结果中的零值和负值
优惠活动
大模型
产品
解决方案
定价
更多

Counter对象执行减法运算如何保留结果中的零值和负值

Python Counter 减法保留零值与负值的实现方法

问题原因说明

  • collections.Counter 重载的-运算符默认仅保留计数大于0的键,计数<=0的键会被自动过滤,因此默认减法无法得到负值、零值对应的键。
  • subtract() 为Counter的原地修改方法,不会返回新的Counter对象,直接将方法调用结果赋值给变量只会得到None。

实现方案

方案1:使用subtract()方法(推荐)

先复制原Counter对象避免修改原始数据,再调用subtract()执行减法,会自动保留所有正负、零值:

from collections import Counter

dic = {'1':6 , '2':4 , '3':2}
dic2 = {'1':3 , '2':1 , '3':5}
obj1 = Counter(dic)
obj2 = Counter(dic2)

# 复制原对象,不修改原始obj1
res = obj1.copy()
# 执行减法操作,原地修改res
res.subtract(obj2)

print(res)
# 输出:Counter({'1': 3, '2': 3, '3': -3})

方案2:手动遍历键计算差值

取两个Counter的所有键的并集,逐个计算差值生成新的Counter,同样可以保留所有值:

from collections import Counter

dic = {'1':6 , '2':4 , '3':2}
dic2 = {'1':3 , '2':1 , '3':5}
obj1 = Counter(dic)
obj2 = Counter(dic2)

res = Counter({k: obj1.get(k, 0) - obj2.get(k, 0) for k in obj1.keys() | obj2.keys()})
print(res)
# 输出:Counter({'1': 3, '2': 3, '3': -3})

两种方案都可以正常保留相减后的零值与负值,根据使用场景选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:54:03