Подсчет количества символов в строке на 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'Bob':>
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]] .'Bob':>
Посчитать количество одинаковых элементов в списке
Дан список целых чисел. Посчитать, сколько раз в нем встречается каждое число. Например, если дан список [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 на обоих массивах мы получили разницу, которая равна количеству элементов в массиве с одинаковыми значениями.