Класс Python Counter является частью модуля Collections. Counter является подклассом Dictionary и используется для отслеживания элементов и их количества.
Python Counter
Counter – это неупорядоченная коллекция, в которой элементы хранятся как ключи Dict
, а их количество – как значения словаря. Количество элементов Counter может быть положительным, нулевым или отрицательным целым числом. Однако нет ограничений на его ключи и значения. Хотя значения предполагается, что они являются числами, но мы также можем хранить другие объекты.
Создание объекта Python Counter
Мы можем создать пустой Counter или начать с некоторых начальных значений.
from collections import Counter
# Пустой Counter
counter = Counter()
print(counter) # Counter()
# Counter с начальными значениями
counter = Counter(['a', 'a', 'b'])
print(counter) # Counter({'a': 2, 'b': 1})
counter = Counter(a=2, b=3, c=1)
print(counter) # Counter({'b': 3, 'a': 2, 'c': 1})
Мы также можем использовать любой итерируемый объект в качестве аргумента для создания объекта Counter. Также можно использовать строковый литерал и List для создания объекта Counter.
# Iterable как аргумент для Counter
counter = Counter('abc')
print(counter) # Counter({'a': 1, 'b': 1, 'c': 1})
# Список как аргумент для Counter
words_list = ['Cat', 'Dog', 'Horse', 'Dog']
counter = Counter(words_list)
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# Словарь как аргумент для Counter
word_count_dict = {'Dog': 2, 'Cat': 1, 'Horse': 1}
counter = Counter(word_count_dict)
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
Как я уже упоминал ранее, мы также можем использовать нечисловые данные для подсчета значений, но это нарушит цель класса Counter.
# Counter работает и с нечисловыми значениями
special_counter = Counter(name='Pankaj', age=20)
print(special_counter) # Counter({'name': 'Pankaj', 'age': 20})
Методы Counter в Python
Давайте рассмотрим методы класса Counter и некоторые другие операции, которые мы можем выполнять с ним.
Получение количества элементов
# получение количества
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
countDog = counter['Dog']
print(countDog) # 2
Если мы попытаемся получить количество несуществующего ключа, он вернет 0, а не вызовет исключение KeyError
.
# получение количества для несуществующего ключа, не вызывает KeyError
print(counter['Unicorn']) # 0
Установка количества элементов
Мы также можем установить количество существующего элемента в счетчике. Если элемент не существует, то он добавляется в счетчик.
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# установка количества
counter['Horse'] = 0
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})
# установка количества for non-existing key, adds to Counter
counter['Unicorn'] = 1
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Unicorn': 1, 'Horse': 0})
Удаление элемента из счетчика
Мы можем использовать del
, чтобы удалить элемент из объекта счетчика.
# Удаление элемента из счетчика
del counter['Unicorn']
print(counter) # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})
elements()
Этот метод возвращает список элементов в счетчике. Возвращаются только элементы с положительными значениями счетчика.
counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})
# elements()
elements = counter.elements() # doesn't return elements with count 0 or less
for value in elements:
print(value)
Приведенный выше код выведет “Собака” дважды, потому что ее счет равен 2. Другие элементы будут проигнорированы, потому что у них нет положительного счета. Счетчик – это неупорядоченная коллекция, поэтому элементы возвращаются в произвольном порядке.
most_common(n)
Этот метод возвращает наиболее часто встречающиеся элементы из счетчика. Если мы не предоставим значение “n”, то будет возвращен отсортированный словарь от наиболее до наименее часто встречающихся элементов. Мы можем использовать срезку для получения наименее часто встречающихся элементов из этого отсортированного словаря.
counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})
# 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()
класса Counter используется для вычитания количества элементов из другого счетчика. Метод update()
используется для добавления количества из другого счетчика.
counter = Counter('ababab')
print(counter) # Counter({'a': 3, 'b': 3})
c = Counter('abc')
print(c) # Counter({'a': 1, 'b': 1, 'c': 1})
# subtract
counter.subtract(c)
print(counter) # Counter({'a': 2, 'b': 2, 'c': -1})
# update
counter.update(c)
print(counter) # Counter({'a': 3, 'b': 3, 'c': 0})
Арифметические операции счетчика Python
Мы также можем выполнять некоторые арифметические операции со счетчиками, как с числами. Однако только элементы с положительным количеством возвращаются при выполнении этих операций.
# арифметические операции
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({'a': 3, 'c': 1})
c = c1 - c2 # keeps only +ve count elements
print(c) # Counter({'a': 1, 'b': 1})
c = c1 & c2 # intersection min(c1[x], c2[x])
print(c) # Counter({'a': 1})
c = c1 | c2 # union max(c1[x], c2[x])
print(c) # Counter({'a': 2, 'c': 2})
Различные операции со счетчиком Python
Давайте рассмотрим несколько примеров кода для различных операций, которые мы можем выполнять с объектами Counter.
counter = Counter({'a': 3, 'b': 3, 'c': 0})
# примеры различных операций
print(sum(counter.values())) # 6
print(list(counter)) # ['a', 'b', 'c']
print(set(counter)) # {'a', 'b', 'c'}
print(dict(counter)) # {'a': 3, 'b': 3, 'c': 0}
print(counter.items()) # dict_items([('a', 3), ('b', 3), ('c', 0)])
# удаление элементов с 0 или отрицательным количеством
counter = Counter(a=2, b=3, c=-1, d=0)
counter = +counter
print(counter) # Counter({'b': 3, 'a': 2})
# очистка всех элементов
counter.clear()
print(counter) # Counter()
Это все для класса Counter в Python.
Вы можете скачать полный пример кода из моего репозитория на GitHub.
Ссылка: Документация по Python
Source:
https://www.digitalocean.com/community/tutorials/python-counter-python-collections-counter