Counter в питоне что это
Перейти к содержимому

Counter в питоне что это

  • автор:

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

Python 3 логотип

Модуль 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: подсчёт количества вхождений подстроки

Метод 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *