collections.Counter
Данный тип, являясь потомком словаря, предоставляет инструменты для подсчёта количества хешируемых объектов.
На заметку
Тип может напомнить вам bag в Smalltalk или multiset в C++.
В этой коллекции сущности хранятся в виде ключей, а их количество — в виде значений.
Количество может обозначаться любым целым, включая нуль и отрицательные.
Подсчёт может производиться для элементов объекта, поддерживающего итерирование, либо другого отображения.
from collections import Counter
mycounter = Counter()
mycounter.items()
# dict_items([])
mycounter = Counter()
mycounter.items()
# dict_items([('one', 1), ('many', 10)])
mycounter = Counter('abca')
mycounter.items()
# dict_items([('a', 2), ('b', 1), ('c', 1)])
mycounter = Counter(['a', 'b', 'c', 'a'])
mycounter.items()
# dict_items([('a', 2), ('b', 1), ('c', 1)])
# дополнение счётчика
mycounter['a'] += 1
mycounter.items()
# dict_items([('a', 3), ('b', 1), ('c', 1)])
# все повторения элементов с ненулевым положительным количеством
list(mycounter.elements())
# ['a', 'a', 'a', 'b', 'c']
# самые встречаемые 2 элемента
mycounter.most_common(2)
# [('a', 3), ('b', 1)]
# вычитание из счётчика
mycounter.subtract()
mycounter.items()
# dict_items([('a', 2), ('b', 1), ('c', 1)])
# удаление элемента
del mycounter['b']
mycounter.items()
# dict_items([('a', 2), ('c', 1)])
Для счётчиков также доступны операции:
| + | сложение |
| — | вычитание (с сохранением только положительных значений) |
| & | пересечение ( min(counter1[x], counter2[x]) ) |
| | | объединение ( max(counter1[x], counter2[x]) ) |
На заметку
Счётчики были спроектированы в основном для работы с положительными целыми. Однако это не означает, что нельзя в качестве значения поместить объект иного типа.
Модуль 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 в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Counter в питоне что это
![]()
Метод count() в Python: подсчёт количества вхождений подстроки
17 июня 2023
Оценки статьи
Еще никто не оценил статью
Один из полезных методов, доступных для строк в Python, называется count() .
Этот метод позволяет подсчитывать количество вхождений заданной подстроки в строку. Он возвращает число, которое представляет количество найденных вхождений.
Синтаксис метода count()
str.count(sub[, start[, end]])
Параметры:
- sub (обязательный): Подстрока, количество вхождений которой нужно подсчитать.
- start (необязательный): Начальный индекс поиска. По умолчанию поиск начинается с начала строки.
- end (необязательный): Конечный индекс поиска. По умолчанию поиск производится до конца строки.
Примеры использования метода count()
Подсчёт количества символов
text = "Hello, World!" count = text.count('l') print(count) # Вывод: 2
Подсчёт количества слов
sentence = "Python is a popular programming language. Python is versatile and easy to learn." count = sentence.count('Python') print(count) # Вывод: 4
Подсчёт количества вхождений с учетом диапазона
text = "Hello, World!" count = text.count('o', 4) # Подсчитывает количество символов 'o' после индекса 4 print(count) # Вывод: 2
Заключение
Метод count() предоставляет удобный способ подсчитывать количество вхождений заданной подстроки в строке. Он может быть полезен во многих сценариях программирования, таких как подсчёт символов, слов или других элементов.
При использовании метода count() обратите внимание на возможность указания начального и конечного индексов, что позволяет ограничить диапазон поиска. Этот метод является незаменимым инструментом при работе со строками в Python.
Класс Counter() модуля collections в Python
Подсчет количества повторений элементов в последовательности
класс collections.Counter() предназначен для удобных и быстрых подсчетов количества появлений неизменяемых элементов в последовательностях.
>>> from collections import Counter >>> cnt = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue']) >>> dict(cnt) #
Синтаксис:
import collections cnt = collections.Counter([iterable-or-mapping])
Параметры:
- iterable-or-mapping - итерируемая последовательность или словарь.
Возвращаемое значение:
Описание:
Класс Counter() модуля collections - это подкласс словаря dict для подсчета хеш-объектов (неизменяемых, таких как строки, числа, кортежи и т.д.). Это коллекция, в которой элементы хранятся в виде словарных ключей, а их счетчики хранятся в виде значений словаря.
Счетчик может быть любым целочисленным значением, включая ноль или отрицательное число. Класс collections.Counter() похож на мультимножества в других языках программирования.
Элементы считываются из итерируемой последовательности, инициализируются из другого словаря или счетчика Counter() :
>>> from collections import Counter # новый пустой счетчик >>> cnt = Counter() # новый счетчик из последовательности >>> cnt = Counter('gallahad') # новый счетчик из словаря >>> cnt = Counter('red': 4, 'blue': 2>) # новый счетчик из ключевых слов 'args' >>> cnt = Counter(cats=4, dogs=8)
Счетчики collections.Counter() имеют интерфейс словаря, за исключением того, что они возвращают 0 для отсутствующих элементов вместо вызова исключения KeyError :
>>> cnt = Counter(['eggs', 'ham']) >>> cnt['bacon'] # 0
Установка счетчика в ноль не удаляет элементы из счетчика. Используйте инструкцию del , чтобы полностью удалить ключ счетчика:
# запись счетчика с нулевым счетом >>> cnt['sausage'] = 0 # удаление счетчика с нулевым счетом >>> del cnt['sausage']
В качестве подкласса dict() , класс Counter() унаследовал возможность запоминания порядка вставки. Математические операции над объектами Counter() также сохраняют порядок. Результаты упорядочены в соответствии с тем, когда элемент сначала встречается в левом операнде, а затем в порядке, в котором встречается правый операнд.
Расширенные операторы сравнения.
Новое в версии 3.10: Добавлены расширенные операции сравнения.
С версии Python 3.10 счетчики Counter поддерживают расширенные операторы сравнения для отношений равенства, подмножества и надмножества: == , != , < , , >= . Все эти сравнения рассматривают отсутствующие элементы как имеющие нулевое количество, так что Counter(a=1) == Counter(a=1, b=0) возвращает True .
Изменено в версии 3.10: при сравнении на равенство, отсутствующие элементы рассматриваются как имеющие нулевое количество. Раньше Counter(a=3) и Counter(a=3, b=0) считались разными.
Объект Counter , атрибуты и методы:
- Counter.elements() возвращает итератор по элементам.
- Counter.most_common() список наиболее распространенных элементов.
- Counter.subtract() вычитает элементы счетчика и итерируемой последовательности.
- Counter.total() вычисляет сумму значений счетчика.
- Counter.update() складывает элементы счетчика и итерируемой последовательности.
Counter.elements() :
Метод Counter.elements() возвращает итератор по элементам, в котором каждый элемент повторяется столько раз, во сколько установлено его значение. Элементы возвращаются в порядке их появления. Если количество элементов меньше единицы, то метод Counter.elements() просто проигнорирует его.
>>> from collections import Counter >>> cnt = Counter(a=4, b=2, c=0, d=-2) >>> sorted(cnt.elements()) # ['a', 'a', 'a', 'a', 'b', 'b']
Counter.most_common([n]) :
Метод Counter.most_common() возвращает список из n наиболее распространенных элементов и их количество от наиболее распространенных до наименее. Если n опущено или None , метод cnt.most_common() возвращает все элементы в счетчике.
Элементы с равным количеством упорядочены в порядке, в котором они встречаются первыми:
>>> from collections import Counter >>> Counter('abracadabra').most_common(3) # [('a', 5), ('b', 2), ('r', 2)]
Counter.subtract([iterable-or-mapping]) :
Метод Counter.subtract() вычитает элементы текущего счетчика cnt и итерируемой последовательности или другого словаря или другого счетчика Counter() . Подобно методу словаря dict.update() , но вычитает количество (значения ключей), а не заменяет их.
Значения ключей как у счетчика так и у словаря могут быть нулевыми или отрицательными.
>>> from collections import Counter >>> c = Counter(a=4, b=2, c=0, d=-2) >>> d = Counter(a=1, b=2, c=3, d=4) >>> c.subtract(d) >>> c # Counter()
Counter.total() :
В Python 3.10 появился метод Counter.total() , который вычисляет сумму значений текущего счетчика.
>>> from collections import Counter >>> c = Counter(a=10, b=5, c=0) >>> c.total() # 15
В более ранних версиях Python, этот метод можно заменить выражением:
>>> from collections import Counter >>> c = Counter(a=10, b=5, c=0) >>> sum(c.values()) # 15
Для объектов collections.Counter() доступны обычные методы словарей, за исключением двух, которые для счетчиков работают по-другому.
Counter.fromkeys(iterable) :
Метод Counter.fromkeys() не реализован для объектов Counter() .
Counter.update([iterable-or-mapping]) :
Метод Counter.update() складывает элементы текущего счетчика cnt и итерируемой последовательности или другого словаря или другого счетчика Counter() . Работает подобно методу словаря dict.update() , но складывает количество (значения ключей), а не заменяет их.
Кроме того, ожидается, что итерация будет последовательностью элементов, а не последовательностью двойных кортежей (key, value) .
>>> from collections import Counter >>> c = Counter(a=4, b=2, c=0, d=-2) >>> d = Counter(a=1, b=2, c=3, d=4) >>> c.update(d) >>> c # Counter()
Примеры использования класса Counter() .
Общие шаблоны для работы с объектами Counter :
>>> from collections import Counter # создать счетчик из списка кортежей (elem, cnt) >>> cnt = Counter(dict(list_of_pairs)) # преобразовать в список кортежей (elem, cnt) >>> cnt.items() # сумма всех значений в счетчике >>> sum(cnt.values()) # очистить счетчик >>> cnt.clear() # список уникальных элементов >>> list(cnt) # преобразовать в множество >>> set(cnt) # преобразовать в обычный словарь >>> dict(cnt) # N наименее распространенных элементов >>> cnt.most_common()[:-n-1:-1] # Удалить элементы с нулевыми отрицательными значениями >>> +cnt
Предусмотрено несколько математических операций для объединения объектов Counter() для создания мультимножеств (счетчиков, число которых больше нуля). Сложение и вычитание объединяют счетчики путем сложения или вычитания количества соответствующих элементов. Пересечение и объединение возвращают минимум и максимум соответствующих отсчетов.
Каждая операция принимает счетчики, значения ключей которых могут иметь любые числа, но выходные данные исключают из результата ключи с нулевыми отрицательными значениями.
>>> from collections import Counter >>> c = Counter(a=3, b=1) >>> d = Counter(a=1, b=2) # Сложить два счетчика: c[x] + d[x] >>> c + d # Counter() # Вычитание счетчиков, сохраняются # только положительные значения элементов >>> c - d # Counter() # Пересечение счетчиков: min(c[x], d[x]) >>> c & d # Counter() # Объединение счетчиков: max(c[x], d[x]) >>> c | d # Counter()
Унарное сложение и вычитание являются ссылками для добавления пустого счетчика или вычитания из пустого счетчика.
>>> from collections import Counter >>> c = Counter(a=2, b=-4) >>> +c # Counter() >>> -c # Counter()
Подсчёт одинаковых слов в файле при помощи collections.Counter() .
При помощи класса collections.Counter() можно легко подсчитать количество повторений слов в тексте. Например найдем десять самых распространенных слов в трагедия Уильяма Шекспира "Гамлет".
from collections import Counter from re import findall with open('hamlet.txt') as fp: words = findall(r'\w+', fp.read().lower()) cnt = Counter(words).most_common(10) print(cnt) # [('the', 1143), ('and', 966), ('to', 762), # ('of', 669), ('i', 631), ('you', 554), # ('a', 546), ('my', 514), ('hamlet', 471), # ('in', 451)]
Ограничения типа Counter() и минимальный диапазон:
Счетчики были в первую очередь предназначены для работы с положительными целыми числами для представления счетчиков.
Здесь описаны минимальный диапазон и ограничения типа Counter() , чтобы не исключать случаи использования, требующие хранения других типов или отрицательных значений.
- Сам класс collections.Counter() является подклассом словаря dict без ограничений по ключам и значениям. Значения предназначены для чисел, представляющих счетчики, но вы можете хранить все что угодно в поле значений.
- Метод cnt.most_common() только сортирует значения ключей по убыванию.
- Для операций на месте, таких как cnt[key] += 1 , тип значения должен только поддерживать сложение и вычитание. Таким образом, дроби, числа с плавающей запятой и десятичные числа будут работать, отрицательные значения тоже поддерживаются. То же самое относится и к методам cnt.update() и cnt.subtract() , которые допускают отрицательные и нулевые значения для входных и выходных данных.
- Мультимножественные методы предназначены только для случаев использования с положительными значениями. Входные значения ключей могут быть отрицательными или нулевыми, но в результате операций сохраняются только положительные значения. Нет ограничений по типу, но тип значения должен поддерживать сложение, вычитание и сравнение.
- Метод Counter.elements() работает только с положительными целыми числами и будет игнорировать ноль и отрицательные значения.
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Класс ChainMap() модуля collections
- Класс deque() модуля collections
- Класс Counter() модуля collections
- Класс defaultdict() модуля collections
- Класс namedtuple() модуля collections
- Класс OrderedDict() модуля collections
- Класс UserString() модуля collections
- Класс UserDict модуля collections
- Класс UserList модуля collections