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

Обновлено: 02.11.2025

Дан список, среди элементов которого есть одинаковые значения. Посчитать, сколько раз в нем встречается каждое значение. Например, если дан список [1, 1, 3, 2, 1, 3, 4], то в нем число 1 встречается три раза, число 3 — два раза, числа 2 и 4 — по одному разу.

Подсчет сколько в раз в списке встречается каждое значение на языке программирования Python
#
×

Решение задачи на языке программирования Python

Для хранения количества каждого встречающегося в списке значения создадим словарь. В нем ключами будут значения элементов, которые встречаются в списке, а значениями — количества таких элементов в списке. Для примера, приведенного выше, в итоге должна получиться такая структура: {1: 3, 3: 2, 2: 1, 4: 1}.

Алгоритм подсчета заключается в следующем. Если очередной элемент списка уже есть в качестве ключа словаря, то следует увеличить значение этого ключа на единицу. Если очередного элемента списка нет в качестве ключа в словаре, то такой ключ следует добавить и присвоить ему значение, равное единице.

words = ['box', 'book', 'cat', 'dog', 'box',
         'book', 'book', 'clock', 'clock']
f = {}

for i in words:
    if i in f:
        f[i] += 1
    else:
        f[i] = 1

print(f)

Пример выполнения:

{'box': 2, 'book': 3, 'cat': 1, 'dog': 1, 'clock': 2}

В случае со списком чисел решение будет таким же:

from random import randint

numbers = [randint(0, 5) for i in range(10)]
f = {}

for i in numbers:
    if i in f:
        f[i] += 1
    else:
        f[i] = 1

print(numbers)
print(f)
[4, 4, 4, 5, 4, 5, 0, 5, 4, 2]
{4: 5, 5: 3, 0: 1, 2: 1}

Задача может быть сложнее, если требуется вывести ключи словаря в отсортированном виде. Для этого можно использовать функцию sorted. Она сортирует ключи словаря и помещает их в список.

print(numbers)
for i in sorted(f):
    print(f"'{i}': {f[i]}")
[5, 4, 4, 1, 1, 5, 3, 1, 0, 4]
'0': 1
'1': 3
'3': 1
'4': 3
'5': 2

Сортировка по значениям будет выглядеть немного сложнее.

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

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

words = ['box', 'book', 'cat', 'dog', 'box',
         'book', 'book', 'clock', 'clock']
s = set(words)

for i in s:
    print(f'{i}: {words.count(i)}')
cat: 1
book: 3
clock: 2
dog: 1
box: 2

Обратим внимание, что можно сочетать и метод count(), и словарь:

words = ['box', 'book', 'cat', 'dog', 'box',
         'book', 'book', 'clock', 'clock']
f = {}

for i in set(words):
    f[i] = words.count(i)

print(f)
{'clock': 2, 'box': 2, 'dog': 1, 'cat': 1, 'book': 3}