В описании типа Counter сказано что он - наследник dict. И не сказано, что он также и множество. Приведенный ниже код работает и выдает результат: Counter({'q': 1, 'w': 1})
from collections import Counter
c1 = Counter({'q':1, "w":2})
c2 = Counter({'q':1, "w":1})
c = c1 & c2
print(c)
Вопрос - почему не описано, что он - множество? Или он "не вполне" множество?
Ответ
Это объект типа Counter (наследник dict) для которого перегружен оператор & (__and__(...))
def __and__(self, other):
''' Intersection is the minimum of corresponding counts.
>>> Counter('abbb') & Counter('bcc')
Counter({'b': 1})
'''
if not isinstance(other, Counter):
return NotImplemented
result = Counter()
for elem, count in self.items():
other_count = other[elem]
newcount = count if count < other_count else other_count
if newcount > 0:
result[elem] = newcount
return result
Примеры:
In [54]: issubclass(Counter, dict)
Out[54]: True
In [55]: issubclass(Counter, set)
Out[55]: False
In [39]: type(c)
Out[39]: collections.Counter
In [40]: c.items()
Out[40]: dict_items([('q', 1), ('w', 1)])
In [41]: type(c.items())
Out[41]: dict_items
In [42]: c.keys()
Out[42]: dict_keys(['q', 'w'])
Комментариев нет:
Отправить комментарий