Страницы

Поиск по вопросам

четверг, 20 декабря 2018 г.

тип Counter() - словарь или множество?

В описании типа 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'])

Комментариев нет:

Отправить комментарий