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没有开箱即用的解决方案,我必须为每个操作员编写一个函数(或者创建一个通用的函数并传递比较函数).