减去结果中包含负值的 Counter 对象

Subtraction of Counter objects with negative values included in result

我试图以零值和负值包含在结果计数器中的方式减去两个计数器对象,但没有得到所需的输出。示例代码块 '`

1- dic = {'1':6 , '2':4 , '3':2}
2- dic2 = {'1':3 , '2':1 , '3':5}
3- obj1 = Counter(dic)
4- obj2 = Counter(dic2)
5- obj = obj1-obj2 
6- print(obj) 
#Output
Counter({'1':3 , '2':3}) #it omits the '3':-3 part

#In line 5 I also used subtract() but it is returning none 
5 - obj = obj1.subtract(obj2)
#output
None

您可以使用 Countersubtract 方法。

In [23]: c = Counter(a=4, b=2, c=0, d=-2)
    ...: d = Counter(a=1, b=2, c=3, d=4)
    ...: c.subtract(d)
    ...: c
Out[23]: Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

注意: Counter('abbbc') - Counter('bccd') 也减去计数,但只保留正计数的结果。

减去计数器 obj1 - obj2 只保留正计数和 return 计数器,而 obj1.subtract(obj2) 保留负计数但它改变 obj1 和 return None.

因此,你把obj赋值给None,你会发现实际上减去了obj1

obj1 = Counter({'1':6, '2':4, '3':2})
obj2 = Counter({'1':3, '2':1, '3':5})
obj = obj1.subtract(obj2)
print(obj)
print(obj1)

输出:

None
Counter({'1': 3, '2': 3, '3': -3})

您可以只删除作业和 print(obj1),或者如果您想保留 obj1,请先复制一份。

# 1. change obj1
obj1.subtract(obj2)
print(obj1)
# 2. keep obj1
obj = obj1.copy()
obj.subtract(obj2)
print(obj)