- Метод Counter в Python
- Создание объекта
- Методы
- Получение количества элементов
- Установка количества элементов
- Удаление элемента из счетчика
- elements()
- most_common(n)
- subtract() и update()
- Арифметические операции
- Разные операции
- Модуль collections
- collections.Counter
- collections.deque
- collections.defaultdict
- collections.OrderedDict
- collections.namedtuple()
Метод Counter в Python
Класс Counter в Python является частью модуля Collections. Counter является подклассом Dictionary и используется для отслеживания элементов и их количества.
Counter – это неупорядоченная коллекция, в которой элементы хранятся, как ключи Dict, а их количество – как значение dict.
Количество элементов счетчика может быть положительным, нулевым или отрицательным целым числом. Однако нет никаких ограничений на его ключи и значения. Хотя значения предназначены быть числами, мы можем хранить и другие объекты.
Создание объекта
Мы можем создать пустой счетчик или начать с некоторых начальных значений.
from collections import Counter # empty Counter counter = Counter() print(counter) # Counter() # Counter with initial values counter = Counter(['a', 'a', 'b']) print(counter) # Counter() counter = Counter(a=2, b=3, c=1) print(counter) # Counter()
Мы также можем использовать любой Iterable в качестве аргумента для создания объекта Counter. Таким образом, строковый литерал и список также могут использоваться для создания объекта Counter.
# Iterable as argument for Counter counter = Counter('abc') print(counter) # Counter() # List as argument to Counter words_list = ['Cat', 'Dog', 'Horse', 'Dog'] counter = Counter(words_list) print(counter) # Counter() # Dictionary as argument to Counter word_count_dict = counter = Counter(word_count_dict) print(counter) # Counter()
Как я упоминал выше, мы также можем использовать нечисловые данные для значений счетчика, но это нарушит назначение класса Counter.
# Counter works with non-numbers too special_counter = Counter(name='Pankaj', age=20) print(special_counter) # Counter()
Методы
Давайте рассмотрим методы класса Counter и некоторые другие операции, которые мы можем с ним выполнять.
Получение количества элементов
# getting count counter = Counter() countDog = counter['Dog'] print(countDog) # 2
Если мы попытаемся получить количество несуществующего ключа, он вернет 0 и не выбросит KeyError.
# getting count for non existing key, don't cause KeyError print(counter['Unicorn']) # 0
Установка количества элементов
Мы также можем установить количество существующих элементов в счетчике. Если элемент не существует, он добавляется в счетчик.
counter = Counter() # setting count counter['Horse'] = 0 print(counter) # Counter() # setting count for non-existing key, adds to Counter counter['Unicorn'] = 1 print(counter) # Counter()
Удаление элемента из счетчика
Мы можем использовать del для удаления элемента из объекта счетчика.
# Delete element from Counter del counter['Unicorn'] print(counter) # Counter()
elements()
Этот метод в Python возвращает список элементов счетчика. Возвращаются только элементы с положительным счетом.
counter = Counter() # elements() elements = counter.elements() # doesn't return elements with count 0 or less for value in elements: print(value)
Приведенный выше код напечатает «Собака» два раза, потому что его счетчик равен 2. Другие элементы будут проигнорированы, потому что у них нет положительного счета. Counter – это неупорядоченная коллекция, поэтому элементы возвращаются в произвольном порядке.
most_common(n)
Этот метод возвращает самые распространенные элементы из счетчика. Если мы не предоставляем значение «n», то отсортированный словарь возвращается из наиболее и наименее распространенных элементов.
Мы можем использовать нарезку, чтобы получить наименее распространенные элементы в этом отсортированном словаре.
counter = Counter() # most_common() most_common_element = counter.most_common(1) print(most_common_element) # [('Dog', 2)] least_common_element = counter.most_common()[:-2:-1] print(least_common_element) # [('Cat', -1)]
subtract() и update()
Метод subtract() используется для вычитания количества элементов из другого счетчика. update() используется для добавления счетчиков из другого счетчика.
counter = Counter('ababab') print(counter) # Counter() c = Counter('abc') print(c) # Counter() # subtract counter.subtract(c) print(counter) # Counter() # update counter.update(c) print(counter) # Counter()
Арифметические операции
Мы также можем выполнять некоторые арифметические операции со счетчиками, как и числа. Однако с помощью этих операций возвращаются только элементы с положительным счетчиком.
# arithmetic operations c1 = Counter(a=2, b=0, c=-1) c2 = Counter(a=1, b=-1, c=2) c = c1 + c2 # return items having +ve count only print(c) # Counter() c = c1 - c2 # keeps only +ve count elements print(c) # Counter() c = c1 c2 # intersection min(c1[x], c2[x]) print(c) # Counter() c = c1 | c2 # union max(c1[x], c2[x]) print(c) # Counter()
Разные операции
Давайте посмотрим на некоторые фрагменты кода для различных операций, которые мы можем выполнять с объектами Counter.
counter = Counter() # miscellaneous examples print(sum(counter.values())) # 6 print(list(counter)) # ['a', 'b', 'c'] print(set(counter)) # print(dict(counter)) # print(counter.items()) # dict_items([('a', 3), ('b', 3), ('c', 0)]) # remove 0 or negative count elements counter = Counter(a=2, b=3, c=-1, d=0) counter = +counter print(counter) # Counter() # clear all elements counter.clear() print(counter) # Counter()
Модуль collections
Модуль collections — предоставляет специализированные типы данных, на основе словарей, кортежей, множеств, списков.
Первым рассматриваемым типом данных будет Counter.
collections.Counter
collections.Counter — вид словаря, который позволяет нам считать количество неизменяемых объектов (в большинстве случаев, строк). Пример:
) Но возможности Counter на этом не заканчиваются. У него есть несколько специальных методов:
elements() — возвращает список элементов в лексикографическом порядке.
most_common([n]) — возвращает n наиболее часто встречающихся элементов, в порядке убывания встречаемости. Если n не указано, возвращаются все элементы.
subtract([iterable-or-mapping]) — вычитание
Наиболее часто употребляемые шаблоны для работы с Counter:
- sum(c.values()) — общее количество.
- c.clear() — очистить счётчик.
- list(c) — список уникальных элементов.
- set(c) — преобразовать в множество.
- dict(c) — преобразовать в словарь.
- c.most_common()[:-n:-1] — n наименее часто встречающихся элементов.
- c += Counter() — удалить элементы, встречающиеся менее одного раза.
Counter также поддерживает сложение, вычитание, пересечение и объединение:
Следующими на очереди у нас очереди (deque)
collections.deque
collections.deque(iterable, [maxlen]) — создаёт очередь из итерируемого объекта с максимальной длиной maxlen. Очереди очень похожи на списки, за исключением того, что добавлять и удалять элементы можно либо справа, либо слева.
Методы, определённые в deque:
append(x) — добавляет x в конец.
appendleft(x) — добавляет x в начало.
clear() — очищает очередь.
count(x) — количество элементов, равных x.
extend(iterable) — добавляет в конец все элементы iterable.
extendleft(iterable) — добавляет в начало все элементы iterable (начиная с последнего элемента iterable).
pop() — удаляет и возвращает последний элемент очереди.
popleft() — удаляет и возвращает первый элемент очереди.
remove(value) — удаляет первое вхождение value.
reverse() — разворачивает очередь.
rotate(n) — последовательно переносит n элементов из начала в конец (если n отрицательно, то с конца в начало).
collections.defaultdict
collections.defaultdict ничем не отличается от обычного словаря за исключением того, что по умолчанию всегда вызывается функция, возвращающая значение:
collections.OrderedDict
collections.OrderedDict — ещё один похожий на словарь объект, но он помнит порядок, в котором ему были даны ключи. Методы:
popitem(last=True) — удаляет последний элемент если last=True, и первый, если last=False.
move_to_end(key, last=True) — добавляет ключ в конец если last=True, и в начало, если last=False.
collections.namedtuple()
Класс collections.namedtuple позволяет создать тип данных, ведущий себя как кортеж, с тем дополнением, что каждому элементу присваивается имя, по которому можно в дальнейшем получать доступ:
Для вставки кода на Python в комментарий заключайте его в теги
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов