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

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

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

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

Пусть в программе будет функция, которая заполняет список случайными числами в диапазоне и количестве, указанными пользователем.

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

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

from random import randint


def fill_list(minimum, maximum, amount, empty_list):
    for i in range(amount):
        empty_list.append(randint(minimum, maximum))


def analysis(from_list, to_dict):
    for i in from_list:
        if i in to_dict:
            to_dict[i] += 1
        else:
            to_dict[i] = 1


lst = []
dct = {}

mn = int(input('Минимум: '))
mx = int(input('Максимум: '))
qty = int(input('Количество элементов: '))

fill_list(mn, mx, qty, lst)
analysis(lst, dct)

for item in sorted(dct):
    print(f"'{item}': {dct[item]}")

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

Минимум: 100
Максимум: 104
Количество элементов: 20
'100': 2
'101': 5
'102': 3
'103': 7
'104': 3

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

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

from random import randint

mn = int(input('Минимум: '))
mx = int(input('Максимум: '))
qty = int(input('Количество элементов: '))

lst = [randint(mn, mx) for i in range(qty)]

s = set(lst)
for i in s:
    print(f"'{i}': {lst.count(i)}")


Решение задач на Python




Все разделы сайта