Senior Pimiento

Python: collections модуль

Некоторые интересные классы из модуля collections

Для начала, нам необходимо импортировать модуль

import collections

Counter

Это подкласс класса dict.

метод elements

Возвращает итератор над элементами counter-а, где каждый ключ будет повторён столько раз, каково значение этого ключа.

import collections

c = collections.Counter(a=4, b=2, c=0, d=-2)
print(list(c.elements()))
['a', 'a', 'a', 'a', 'b', 'b']

метод most_common

Возвращает лист пар в порядке убывания значений.

import collections
print(collections.Counter('abracadabra').most_common(3))
[('a', 5), ('b', 2), ('r', 2)]

Сложение и вычитание

import collections

a = collections.Counter(a=4, b=2, c=0, d=-2)
b = collections.Counter(a=1, b=2, c=3, d=4)

print(a + b)
print(a - b)
print(a & b)
print(a | b)
a.subtract(b)
print(a)
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2})
Counter({'a': 3})
Counter({'b': 2, 'a': 1})
Counter({'d': 4, 'a': 4, 'c': 3, 'b': 2})
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

Deque

import collections

d = collections.deque([1, 2, 3, 4, 5])
d.append(6)
print(d)
d.appendleft(0)
print(d)
print(d.count(2))
d.clear()
print(d)
d.extend(['a', 'b', 'c'])
print(d)
d.extendleft(['x', 'y', 'z'])
print(d)
print(d.pop())
print(d)
print(d.popleft())
print(d)
d.remove('x')
print(d)
d.reverse()
print(d)
d.rotate(2)
print(d)
deque([1, 2, 3, 4, 5, 6])
deque([0, 1, 2, 3, 4, 5, 6])
1
deque([])
deque(['a', 'b', 'c'])
deque(['z', 'y', 'x', 'a', 'b', 'c'])
c
deque(['z', 'y', 'x', 'a', 'b'])
z
deque(['y', 'x', 'a', 'b'])
deque(['y', 'a', 'b'])
deque(['b', 'a', 'y'])
deque(['a', 'y', 'b'])

namedtuple

Immutable!

import collections

Point = collections.namedtuple('Point', ['x', 'y'])
p = Point(x=1, y=2)
print(p)
print(p.x)
Point(x=1, y=2)
1