Количество одинаковых элементов в списке (кортеже) или строке

Опубликован: 29.10.2023 135

В Python для подсчета количества одинаковых элементов в списке, кортеже или строке можно воспользоваться встроенной функцией count(), которая вычисляет, сколько раз конкретное значение встречается в последовательности.

Синтаксис: sequence.count(element)

  • sequence — это последовательность (список, кортеж или строка), в которой нужно произвести поиск;
  • element — это элемент последовательности, количество вхождений которого нужно подсчитать.

Функция count(x) принимает один аргумент: значение x, которое вы хотите найти в списке list_a, и возвращает количество вхождений указанного элемента.

# подсчет количества значений 3 в списке
list_a = [1, 2, 3, 1, 2, 3, 1, 1, 1, 2, 3, 3, 3, 3]
print(list_a.count(3))
6

# подсчет количества значений 1 в кортеже
tuple_a = (1, 2, 3, 1, 2, 3, 1, 1, 1, 2, 3, 3, 3, 3)
print(tuple_a.count(1))
5

Если функция count() используется для подсчета одинаковых элементов в строке string, она принимает в качестве аргумента подстроку substring и возвращает количество раз, которое substring встречается в строке.

# подсчет количества символов `o` в строке
my_string = "Hello, World!"
print(my_string.count('o'))
2

Использование счетчика Counter() встроенного модуля collections.

Еще более быстрым и удобным способом подсчета одинаковых элементов в последовательности является использование счетчика collections.Counter().

Функция collections.Counter() принимает в качестве аргумента итерируемый объект и возвращает словарь, в котором:

  • ключи key - это отдельные элементы последовательности;
  • значения value - количество повторений каждого элемента.

Причем словарь отсортирован по убыванию значений элементов.

import collections

# подсчет количества вхождений элементов в списке
list_a = [1, 2, 3, 1, 2, 3, 1, 1, 1, 2, 3, 3, 3, 3]
cnt = collections.Counter(list_a)
print(cnt)
Counter({3: 6, 1: 5, 2: 3})

# печать результатов подсчета
for key, val in cnt.items():
    print(f"{key} - {val}")
1 - 5
2 - 3
3 - 6

# подсчет количества одинаковых букв в строке
my_string = "Hello World"
cnt = collections.Counter(my_string)
print(cnt)
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1})

Счетчик Counter() имеет ряд полезных методов, в том числе метод most_common(n), который возвращает список из n кортежей [(элемент, количество повторений)] самых часто повторяющихся элементов последовательности.

Если необходимо найти наименее распространенные элементы последовательности, то можно воспользоваться нарезкой с шагом -1.

import collections

list_a = [1, 2, 3, 1, 2, 3, 1, 1, 1, 2, 3, 3, 3, 3]

# вывод двух самых часто повторяющихся элементов списка
cnt = collections.Counter(list_a)
cnt.most_common(2)
[(3, 6), (1, 5)]

# вывод двух наименее распространенных элементов списка
cnt.most_common()[:-3:-1]
[(2, 3), (1, 5)]

Похожие посты

Преимущества двухсторонней очереди collections.deque() над списком

Использование collections.namedtuple() для создания неизменяемого словаря

Преимущества использования словаря collections.defaultdict()

Методы преобразования списка в строку и обратно

Комментариев нет.