Перейти к содержимому

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

  • автор:

Подсчет количества символов в строке на Python

Часто возникает задача подсчета количества определенных символов в строке. Например, необходимо узнать, сколько раз буква ‘b’ встречается в строке ‘Боб был мальчиком, который любил бегать по берегу’.

Python предоставляет несколько простых способов для решения этой задачи.

Использование метода count()

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

s = 'Боб был мальчиком, который любил бегать по берегу' print(s.count('б')) # Выведет: 5

Использование цикла for

Если по каким-то причинам использование count() недоступно или нежелательно, можно использовать цикл for для прохода по всем символам строки и подсчета нужных.

s = 'Боб был мальчиком, который любил бегать по берегу' count = 0 for letter in s: if letter == 'б': count += 1 print(count) # Выведет: 5

Использование генераторов списков

Также можно использовать генераторы списков — это выразительный и компактный способ решения этой задачи.

s = 'Боб был мальчиком, который любил бегать по берегу' count = sum(1 for letter in s if letter == 'б') print(count) # Выведет: 5

Все эти методы вернут одинаковое количество вхождений символа в строке. Выбор метода зависит от конкретной ситуации и личных предпочтений.

Количество повторяющихся элементов в списке

Есть массив, в котором куча повторяющихся элементов. Мне надо вывести содержимое конкретного элемента этого массива и сколько таких же элементов в нём (вывести цифру).
Пример массива:

array = ["Bob", "Alex", "Bob", "John"] 

(типа 2 Боба и т.д.)
Отслеживать
306 1 1 серебряный знак 11 11 бронзовых знаков
задан 24 апр 2015 в 16:00
105 1 1 золотой знак 2 2 серебряных знака 6 6 бронзовых знаков

6 ответов 6

Сортировка: Сброс на вариант по умолчанию

Самый простой способ подсчитать количество вхождений всех элементов — воспользоваться встроенным классом Counter из модуля collections :

In [4]: from collections import Counter In [5]: array = ["Bob", "Alex", "Bob", "John"] In [6]: c = Counter(array) In [7]: c Out[7]: Counter() In [8]: c['Bob'] Out[8]: 2 In [9]: c['Unknown'] Out[9]: 0 

Отслеживать
ответ дан 24 апр 2015 в 17:16
4,179 1 1 золотой знак 27 27 серебряных знаков 41 41 бронзовый знак
Как получить 0 элемент в Counter(<'Bob': 2, 'Alex': 1, 'John': 1>)? c[0] возвращает в итоге 0
3 июл 2021 в 3:41

Из документации: As a dict subclass, Counter Inherited the capability to remember insertion order. . Это значит, что next(iter(Counter(<'Bob': 2, 'Alex': 1, 'John': 1>).values())) вернет 2 (начиная с версии 3.7). Однако .values возвращает view , который не поддерживает random access по индексу, это значит вам придется итерироваться до N элемента чтобы получить его значение. Поэтому на практике будет правильнее держать соответствие keys: index -> key и доставать как c[keys[0]] .

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

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

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

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

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

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

Для того, чтобы вывести содержимое словаря в отсортированном по возрастанию ключей виде, используется функция 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"'': ") 
Минимум: 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"'': ")

X Скрыть Наверх

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

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

Для поиска одинаковых элементов в массиве нагляднее всего воспользоваться циклом:

const nums = [1, 2, 1, 4, 5, 1, 7, 8, 1, 10]; let count = 0; for (let i = 0; i  nums.length; i +=1 )  if (nums[i] === 1)  count += 1; > > // Вывод: 4 

Или например, необходимо посчитать сколько раз встречается каждая цифра в исходном массиве, с помощью reduce:

const nums = [1, 2, 7, 4, 5, 2, 7, 8, 1, 10]; const res = nums.reduce((acc, i) =>  if (acc.hasOwnProperty(i))  acc[i] += 1; > else  acc[i] = 1; > return acc; >,<>) // Вывод: 

05 апреля 2023

Еще один способ. Можно использовать метод sort :

const arr = [1, 5, 0, 3, 5, 8, 9]; const unique = [. new Set(arr)]; const diff = arr.length - unique.length; 

В переменной unique мы храним массив уникальных значений, полученный из основного массива arr . Для этого мы воспользовались конструкцией new Set() для создания новой коллекции уникальных значений. С помощью десктруктуризации мы перевели этот объект коллекции к массиву. Затем, с помощью свойства length на обоих массивах мы получили разницу, которая равна количеству элементов в массиве с одинаковыми значениями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *