Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Counter в collections Python: эффективное подсчёт, обновление и арифметические операции

Что такое Counter в Python?

Counter в Python — это специализированный контейнер, подсчитывающий вхождения каждого элемента в итерируемом объекте. Он наследуется от dict и хранит элементы как ключи с их счётчиками как значениями, что делает его идеальным инструментом для хеш-табличного подсчёта.

Зачем использовать Counter?

Начало работы с Counter

Импортируйте класс из collections:

from collections import Counter

Теперь можно передать любой итерируемый объект в Counter и получить отображение счётчиков.

Пример — подсчёт списка

list1 = ['x','y','z','x','x','x','y','z']
print(Counter(list1))

Вывод:

Counter({'x': 4, 'y': 2, 'z': 2})

Пример — подсчёт строки

my_str = "Welcome to Guru99 Tutorials!"
print(Counter(my_str))

Вывод:

Counter({'o': 3, ' ': 3, 'u': 3, 'e': 2, 'l': 2, 't': 2, 'r': 2, '9': 2, 'W': 1, 'c': 1, 'm': 1, 'G': 1, 'T': 1, 'i': 1, 'a': 1, 's': 1, '!': 1})

Пример — подсчёт словаря

dict1 = {'x': 4, 'y': 2, 'z': 2}
print(Counter(dict1))

Вывод:

Counter({'x': 4, 'y': 2, 'z': 2})

Пример — подсчёт кортежа

tuple1 = ('x','y','z','x','x','x','y','z')
print(Counter(tuple1))

Вывод:

Counter({'x': 4, 'y': 2, 'z': 2})

Инициализация, обновление и доступ к счётчикам

Инициализация

print(Counter("Welcome to Guru99 Tutorials!"))  # строка
print(Counter(['x','y','z','x','x','x','y','z']))  # список
print(Counter({'x': 4, 'y': 2, 'z': 2}))  # словарь
print(Counter(('x','y','z','x','x','x','y','z')))  # кортеж
# Пустой счётчик
_count = Counter()

Обновление

_count.update('Welcome to Guru99 Tutorials!')
print(_count)

Вывод:

Counter({'o': 3, ' ': 3, 'u': 3, 'e': 2, 'l': 2, 't': 2, 'r': 2, '9': 2, 'W': 1, 'c': 1, 'm': 1, 'G': 1, 'T': 1, 'i': 1, 'a': 1, 's': 1, '!': 1})

Доступ к счётчикам

print('%s : %d' % ('u', _count['u']))
for char in 'Guru':
    print('%s : %d' % (char, _count[char]))

Вывод:

u : 3
G : 1
u : 3
r : 2
u : 3

Удаление элемента

del _count['x']
print(_count)

Вывод:

Counter({'y': 2, 'z': 2})

Арифметические операции

Counter поддерживает множественные арифметические операции. Положительные счётчики сохраняются; отрицательные значения отбрасываются в результате.

counter1 = Counter({'x': 4, 'y': 2, 'z': -2})
counter2 = Counter({'x1': -12, 'y': 5, 'z': 4})

# Сложение
print(counter1 + counter2)
# Вычитание
print(counter1 - counter2)
# Пересечение
print(counter1 & counter2)
# Объединение
print(counter1 | counter2)

Вывод:

Counter({'y': 7, 'x': 4, 'z': 2})
Counter({'x1': 12, 'x': 4})
Counter({'y': 2})
Counter({'y': 5, 'x': 4, 'z': 4})

Ключевые методы

Использование elements()

counter = Counter({'x': 5, 'y': 2, 'z': -2, 'x1': 0})
for e in counter.elements():
    print(e)

Вывод:

x
x
x
x
x
y
y

Использование most_common()

counter = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
print(counter.most_common(2))
print(counter.most_common())

Вывод:

[('y', 12), ('x', 5)]
[('y', 12), ('x', 5), ('x1', 0), ('z', -2)]

Использование subtract()

c1 = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
c2 = Counter({'x': 2, 'y': 5})
c1.subtract(c2)
print(c1)

Вывод:

Counter({'y': 7, 'x': 3, 'x1': 0, 'z': -2})

Использование update()

c1 = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
c2 = Counter({'x': 2, 'y': 5})
c1.update(c2)
print(c1)

Вывод:

Counter({'y': 17, 'x': 7, 'x1': 0, 'z': -2})

Переназначение счётчиков

counter = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
counter['y'] = 20
print(counter)

Вывод:

Counter({'y': 20, 'x': 5, 'x1': 0, 'z': -2})

Получение и установка счётчиков элементов

counter = Counter({'x': 5, 'y': 12, 'z': -2, 'x1': 0})
print(counter['y'])
counter['y'] = 20
counter['y1'] = 10
print(counter)

Вывод:

12
Counter({'y': 20, 'y1': 10, 'x': 5, 'x1': 0, 'z': -2})

Резюме

Python

  1. Мастерство метода strip() в Python: подробное руководство и практические примеры
  2. Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
  3. Мастерство строк форматирования format() в Python: понятные примеры
  4. Python len(): практическое руководство по измерению длины объектов
  5. Мастерство метода String.find() в Python: синтаксис, примеры и альтернативы
  6. Освоение лямбда-функций Python: практические примеры и лучшие практики
  7. Функция round() в Python: подробное объяснение с практическими примерами
  8. Освоение функции map() в Python: синтаксис, примеры и лучшие практики
  9. Python timeit(): измерение времени выполнения с практическими примерами
  10. Python list.count(): экспертное руководство с практическими примерами