enr*_*cis 7 python algorithm counter inclusion
如何使用以下定义测试python Counter
是否包含在另一个中:
A计数器
a
是包含在计数器b
,当且仅当,对于每一个键k
在a
,该值a[k]
小于或等于该值b[k]
.该Counter({'a': 1, 'b': 1})
包含在Counter({'a': 2, 'b': 2})
,但它不包含在Counter({'a': 2, 'c': 2})
.
我认为这是一个糟糕的设计选择,但在Python 2.x中的比较操作符(<
,<=
,>=
,>
),不要使用以前的定义,所以第三计数器被认为大于第一.相反,在python 3.x中,Counter
是一种不可共享的类型.
Blc*_*ght 11
虽然Counter
实例<
与>
运营商不具有可比性,但您可以找到与-
运营商的不同之处.差异永远不会返回负数,因此如果A - B
为空,则表示B
包含所有项目A
.
def contains(larger, smaller):
return not smaller - larger
Run Code Online (Sandbox Code Playgroud)
我想出的最好的是转换我在代码中给出的定义:
def contains(container, contained):
return all(container[x] >= contained[x] for x in contained)
Run Code Online (Sandbox Code Playgroud)
但是如果觉得奇怪的是python没有开箱即用的解决方案,我必须为每个操作员编写一个函数(或者创建一个通用的函数并传递比较函数).