Как использовать счетчик Python из модуля коллекций

В этом руководстве вы узнаете, как использовать объект счетчика из модуля коллекции Python.

Когда вы работаете с длинными последовательностями в Python, например, со списками или строками Python, вам иногда может понадобиться сохранить элементы, которые появляются в последовательности, и количество раз, когда они появляются.

Словарь Python является подходящей встроенной структурой данных для таких приложений. Однако класс Python Counter из модуля collections может упростить это, создав счетчик, который представляет собой словарь элементов и их количество в последовательности.

В течение следующих нескольких минут вы узнаете следующее:

  • Используйте объект счетчика Python
  • Создайте словарь Python для хранения значений количества элементов в итерируемом
  • Перепишите словарь, используя счетчик Python с упрощенным синтаксисом.
  • Выполнение таких операций, как обновление и вычитание элементов, поиск пересечения между двумя объектами-счетчиками.
  • Получите самые частые элементы в счетчике, используя метод most_common()

Давайте начнем!

Модуль коллекций Python и класс счетчика

Вы часто будете использовать словарь Python для хранения элементов и их количества в итерируемом объекте. Элементы и количество хранятся в виде ключей и значений соответственно.

Поскольку класс Counter является частью встроенного модуля коллекций Python, вы можете импортировать его в свой скрипт Python следующим образом:

from collections import Counter

После импорта класса Counter, как уже упоминалось, вы можете создать экземпляр объекта счетчика, как показано ниже:

<counter_object> = Counter(iterable)

Здесь:

  • iterable — это любой допустимый итерируемый объект Python, такой как список Python, строка или кортеж.
  • Элементы в итерируемом объекте должны быть хэшируемыми.

Теперь, когда мы знаем, как использовать Counter для создания объектов-счетчиков из любого итерируемого объекта Python, давайте начнем программировать.

Примеры, используемые в этом руководстве, можно найти в этом GitHub gist.

Как создать объект счетчика из итерируемых объектов Python

Давайте создадим строку Python, скажем, «ренессанс» и назовем ее словом.

>>> word = "renaissance"

Наша цель — создать словарь, в котором каждая буква в строке слов сопоставляется количеству раз, которое она встречается в строке. Один из подходов заключается в использовании циклов for, как показано ниже:

>>> letter_count = {}
>>> for letter in word:
...     if letter not in letter_count:
...         letter_count[letter] = 0
...     letter_count[letter] += 1
...
>>> letter_count
{'r': 1, 'e': 2, 'n': 2, 'a': 2, 'i': 1, 's': 2, 'c': 1}

Давайте разберем, что делает приведенный выше фрагмент кода:

  • Инициализирует letter_count пустым словарем Python.
  • Перебирает строку слов.
  • Проверяет, присутствует ли буква в словаре letter_count.
  • Если буква отсутствует, она добавляется со значением 0 и впоследствии увеличивает значение на 1.
  • Для каждого вхождения буквы в слово значение, соответствующее этой букве, увеличивается на 1.
  • Это продолжается до тех пор, пока мы не переберем всю строку.

Мы создали словарь letter_count самостоятельно, используя цикл for для перебора строкового слова.

Теперь воспользуемся классом Counter из модуля collections. Нам нужно только передать строку слова в Counter(), чтобы получить letter_count без необходимости перебирать итерации.

>>> from collections import Counter
>>> letter_count = Counter(word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1})

Объект счетчика также является словарем Python. Мы можем использовать встроенную функцию isinstance(), чтобы проверить это:

>>> isinstance(letter_count,dict)
True

Как видно, isinstance(letter_count, dict) возвращает True, указывая на то, что объект счетчика letter_count является экземпляром класса dict Python.

Изменение объекта счетчика

До сих пор мы научились создавать объекты-счетчики из строк Python.

Вы также можете изменять объекты счетчиков, обновляя их элементами из другого итерируемого объекта или вычитая из них другой итерируемый объект.

Обновление счетчика элементами из другого итерируемого объекта

Давайте инициализируем другую строку other_word:

>>> another_word = "effervescence"

Предположим, мы хотим обновить объект счетчика letter_count элементами из строки other_word.

Мы можем использовать метод update() для объекта счетчика letter_count.

>>> letter_count.update(another_word)
>>> letter_count
Counter({'e': 7, 'n': 3, 's': 3, 'c': 3, 'r': 2, 'a': 2, 'f': 2, 'i': 1, 'v': 1})

В выводе мы видим, что объект счетчика был обновлен, чтобы также включить буквы и их количество вхождений из other_word.

Вычитание элементов из другого итерируемого объекта

Теперь давайте вычтем значение other_word из объекта letter_count. Для этого мы можем использовать метод subtract(). Использование .subtract() вычитает значения, соответствующие элементам в , из .

Давайте вычтем other_word из letter_count.

>>> letter_count.subtract(another_word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1, 'f': 0, 'v': 0})

Мы видим, что значения, соответствующие буквам в other_word, были вычтены, но добавленные ключи «f» и «v» не удалены. Теперь они сопоставляются со значением 0.

Примечание. Здесь мы передали Another_word, строку Python, в вызов метода subtract(). Мы также можем передать объект счетчика Python или другой итерируемый объект.

Пересечение между двумя объектами-счетчиками в Python

Иногда вам может понадобиться найти пересечение между двумя объектами-счетчиками Python, чтобы определить, какие ключи являются общими для них.

Давайте создадим объект-счетчик, скажем, letter_count_2 из строки Another_Word ‘effervescence’.

>>> another_word = "effervescence"
>>> letter_count_2 = Counter(another_word)
>>> letter_count_2
Counter({'e': 5, 'f': 2, 'c': 2, 'r': 1, 'v': 1, 's': 1, 'n': 1})

Мы можем использовать простой оператор &, чтобы найти пересечение между letter_count и letter_count_2.

>>> letter_count & letter_count_2
Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})

Обратите внимание, как вы получаете ключи и количество вхождений, общих для двух слов. И «возрождение», и «кипение» содержат два вхождения «е» и по одному общему вхождению «r», «n», «s» и «c».

Найдите наиболее часто встречающиеся элементы с помощью most_common

Другая распространенная операция над объектом счетчика Python — поиск наиболее часто встречающихся элементов.

Чтобы получить k самых распространенных элементов в счетчике, вы можете использовать метод most_common() для объекта счетчика. Здесь мы вызываем most_common() для letter_count, чтобы найти три наиболее часто встречающиеся буквы.

>>> letter_count.most_common(3)
[('e', 2), ('n', 2), ('a', 2)]

Мы видим, что буквы «е», «н» и «а» встречаются в слове «ренессанс» дважды.

Это особенно полезно, если счетчик содержит большое количество записей и вы заинтересованы в работе с наиболее распространенными ключами.

Заключение

Вот краткий обзор того, что мы узнали в учебнике:

  • Класс Counter из встроенного модуля коллекций Python можно использовать для получения словаря значений счетчика всех элементов в любом итерируемом объекте. Вы должны убедиться, что все элементы в итерируемом объекте являются хэшируемыми.
  • Вы можете обновить содержимое одного объекта счетчика Python содержимым другого объекта счетчика или любого другого итерируемого объекта, используя метод update() с синтаксисом: counter1.update(counter2). Обратите внимание, что вы можете использовать любой итерируемый объект вместо counter2.
  • Если вы хотите удалить содержимое одного из итерируемых объектов из обновленного счетчика, вы можете использовать метод subtract(): counter1.subtract(counter2).
  • Чтобы найти общие элементы между двумя объектами-счетчиками, вы можете использовать оператор &. Имея два счетчика counter1 и counter2, counter1 & counter2 возвращает пересечение этих двух объектов счетчика.
  • Чтобы получить k наиболее частых элементов в счетчике, вы можете использовать метод most_common(). counter.most_common(k) дает k наиболее распространенных элементов и соответствующие счетчики.

Затем узнайте, как использовать dict по умолчанию, еще один класс в модуле коллекций. Вы можете использовать словарь по умолчанию вместо обычного словаря Python для обработки отсутствующих ключей.