Количества одинаковых элементов в списке
Обновлено: 02.11.2025
Дан список, среди элементов которого есть одинаковые значения. Посчитать, сколько раз в нем встречается каждое значение. Например, если дан список [1, 1, 3, 2, 1, 3, 4], то в нем число 1 встречается три раза, число 3 — два раза, числа 2 и 4 — по одному разу.
Решение задачи на языке программирования 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}