Группировка и подсчёт элементов в списке Python

Рассмотрим задачу

Дана строка с текстом, подсчитать количество появления разных букв в тексте.

Для хранения количества букв будем использовать словарь. Рассмотрим самый простой вариант подсчёта. Пройтись по всем буквам, если текущей буквы ещё нет в словаре, то это первое вхождение - устанавливаем кол-во равным одному, если буква уже есть то увеличиваем кол-во на 1.

def countChar1(text): res = {} for c in text: if c not in res: res[c] = 0 res[c] += 1 for key, value in res.items(): print(key, value)

Специально для таких ситуаций в Python в модуле collections есть класс defaultdict. Он позволяет задать функцию которая будет вызываться при попытке получить значение элемента если такой элемент ещё не добавлен в словарь. Используем в качестве такой функции стандартную функцию int которая всегда возвращает 0.

import collections

def countChar2(text): res = collections.defaultdict(int)

for c in text:
    res\[c\] += 1
for key, value in res.items():
    print(key, value)

И третий, самый простой вариант - использование класса Counter. В конструкторе ему передастся список, и мы сразу получаем словарь в котором подсчитано количество вхождений элементов в список.

def countChar3(text): res = collections.Counter(text)

for key, value in res.items():
    print(key, value)

Полный код примера

text = """Контрпример категорически искажает экспериментальный неопределенный интеграл. Аксиома, как следует из вышесказанного, последовательно продуцирует сходящийся ряд. Математическое моделирование однозначно показывает, что алгебра по-прежнему востребована. Минимум оправдывает интеграл от функции, обращающейся в бесконечность в изолированной точке, дальнейшие выкладки оставим студентам в качестве несложной домашней работы. Критерий сходимости Коши категорически усиливает сходящийся ряд, при этом, вместо 13 можно взять любую другую константу. Критерий сходимости Коши последовательно определяет эмпирический критерий интегрируемости. Критерий сходимости Коши восстанавливает равновероятный интеграл от функции, обращающейся в бесконечность в изолированной точке. Нормальное распределение, общеизвестно, последовательно. Согласно предыдущему, умножение вектора на число концентрирует интеграл от функции, обращающейся в бесконечность в изолированной точке. Собственное подмножество, общеизвестно, поддерживает интеграл Пуассона, что несомненно приведет нас к истине. Очевидно проверяется, что ортогональный определитель поддерживает изоморфный криволинейный интеграл. Неравенство Бернулли, как следует из вышесказанного, поразительно."""

текст получен из https://yandex.ru/referats/

import collections import re

text = text.lower() text = re.sub(r'[.\-,!\s\d]', '', text)

def countChar1(text): res = {} for c in text: if c not in res: res[c] = 1 else: res[c] += 1 for key, value in res.items(): print(key, value)

def countChar2(text): res = collections.defaultdict(int)

for c in text:
    res\[c\] += 1
for key, value in res.items():
    print(key, value)

def countChar3(text): res = collections.Counter(text)

for key, value in res.items():
    print(key, value)

print('countChar1') countChar1(text)

print('', 'countChar2', sep='\n') countChar2(text)

print('', 'countChar3', sep='\n') countChar3(text)

Ссылки

Python How To: Group and Count with Dictionariesopen in new window

Последниее изменение: 24.08.2023, 06:42:55