Содержание
  1. Общая длина строки: функция len()
  2. Подсчёт конкретного символа: метод count()
  3. Частота всех символов: collections.Counter
  4. Подсчёт по категориям: буквы, цифры, пробелы
  5. Количество символов без пробелов
  6. Юникод-нюанс: символы, кодовые точки и графемы
  7. Таблица: задача → метод
  8. Частые вопросы
  9. Заключение
ГайдыОбновлено · 07.2026

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

27 февраля 2024 · 6 минут чтения

Чтобы узнать общее количество символов в строке Python, используйте встроенную функцию len() — она возвращает длину строки за одну операцию. Для подсчёта конкретного символа подойдёт метод count(), для частоты всех символов — collections.Counter, а для подсчёта по категориям (буквы, цифры, пробелы) — методы isalpha(), isdigit(), isspace().

Общая длина строки: функция len()

Функция len() — самый простой и быстрый способ посчитать количество символов в строке. Python хранит длину строки в служебных данных объекта, поэтому len() не пересчитывает символы, а сразу возвращает готовое значение. Функция считает все символы: буквы, цифры, пробелы, знаки препинания и переносы строк.

text = "Python — прекрасный язык"
print(len(text))  # 24

Если нужно посчитать символы в тексте из нескольких строк, помните, что каждый перенос строки \n — это тоже один символ, который len() учтёт. Функция len() универсальна: она работает не только со строками, но и со списками, кортежами и другими последовательностями, возвращая число элементов. Именно поэтому для длины строки не нужны циклы или сторонние библиотеки — встроенного механизма достаточно, и он выполняется мгновенно даже на очень длинных текстах.

Подсчёт конкретного символа: метод count()

Метод строки str.count() возвращает количество непересекающихся вхождений указанного символа или подстроки. Это прямой ответ на задачу «сколько раз встречается буква X».

text = "программирование"
print(text.count("р"))   # 3

# работает и с подстрокой
print("banananana".count("na"))  # 4

Метод принимает необязательные границы start и end, чтобы искать не по всей строке, а по срезу: text.count("р", 5, 12). Учтите, что подсчёт чувствителен к регистру — "Ананас".count("а") вернёт 2, а не 3. Чтобы посчитать без учёта регистра, приведите строку к нижнему регистру: text.lower().count("а").

Частота всех символов: collections.Counter

Когда нужно за один проход узнать, сколько раз встречается каждый символ, используйте класс Counter из модуля collections. Он строит словарь «символ → количество» и даёт удобные методы для анализа.

from collections import Counter

text = "mississippi"
counts = Counter(text)
print(counts)               # Counter({'i': 4, 's': 4, 'p': 2, 'm': 1})
print(counts["s"])          # 4
print(counts.most_common(1))  # [('i', 4)] — самый частый символ

Counter удобен для анализа текста: поиска самых частых букв, проверки распределения символов, подготовки данных. Обращение к отсутствующему символу вернёт 0, а не ошибку, что упрощает код.

Подсчёт по категориям: буквы, цифры, пробелы

Чтобы посчитать не все символы, а только буквы, цифры или пробелы, применяют строковые методы-предикаты isalpha(), isdigit(), isspace(). Классический вариант — цикл с ветвлением:

text = "Python 3.12 — версия 2024!"

letters = digits = spaces = other = 0
for char in text:
    if char.isalpha():
        letters += 1
    elif char.isdigit():
        digits += 1
    elif char.isspace():
        spaces += 1
    else:
        other += 1

print(letters, digits, spaces, other)  # 12 7 4 3

Тот же результат можно получить компактнее — через генератор и sum(). Логическое значение True в Python равно 1, поэтому суммирование предикатов даёт готовый счётчик:

letters = sum(c.isalpha() for c in text)
digits  = sum(c.isdigit() for c in text)
spaces  = sum(c.isspace() for c in text)

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

Количество символов без пробелов

Частая задача — посчитать длину строки, игнорируя пробелы. Уберите пробелы методом replace() и измерьте результат:

text = "как посчитать символы"
print(len(text.replace(" ", "")))  # 19

Такой вариант убирает только обычные пробелы. Чтобы отбросить любые пробельные символы — табуляции, переносы строк, неразрывные пробелы, — используйте "".join(text.split()): метод split() без аргументов разбивает строку по любым пробельным символам. Если требуется удалять символы по более сложным правилам, пригодится отдельное руководство «Как удалить символы из строки в Python».

Юникод-нюанс: символы, кодовые точки и графемы

Здесь скрыта самая частая ошибка. Функция len() считает не «видимые символы», а кодовые точки Unicode. Обычно это одно и то же, но не всегда. Символ с диакритическим знаком может храниться как одна кодовая точка (é) или как база плюс комбинируемый акцент (e + ́) — и тогда len() вернёт 2:

s = "é"          # 'é' как e + комбинируемый акцент
print(len(s))          # 2 — две кодовые точки

import unicodedata
normalized = unicodedata.normalize("NFC", s)
print(len(normalized)) # 1 — один символ é

С эмодзи ситуация похожая: составные эмодзи с модификаторами занимают несколько кодовых точек, поэтому len() вернёт больше единицы:

print(len("👍🏽"))  # 2 — жест + модификатор тона кожи

Если задача — посчитать именно видимые знаки (графемы), стандартной библиотеки недостаточно: нужна нормализация через unicodedata.normalize() или сторонняя библиотека для разбиения на графемные кластеры. Для большинства прикладных задач len() достаточно, но при работе с пользовательским вводом, эмодзи и многоязычным текстом об этом стоит помнить. Более гибкий подсчёт по шаблонам даёт язык регулярных выражений — см. руководство по составным регулярным выражениям и справочник метасимволов Python.

Таблица: задача → метод

Как выбрать метод подсчёта символов в строке Python
Как выбрать метод подсчёта символов в строке Python
Задача Метод Пример
Общее число символов len(s) len(text)
Вхождения символа или подстроки str.count() text.count("а")
Частота всех символов collections.Counter Counter(text)
Только буквы isalpha() + sum() sum(c.isalpha() for c in text)
Только цифры isdigit() + sum() sum(c.isdigit() for c in text)
Только пробелы isspace() + sum() sum(c.isspace() for c in text)
Без пробелов replace() + len() len(text.replace(" ", ""))
Видимые знаки (графемы) нормализация Unicode unicodedata.normalize("NFC", s)

Официальное описание всех методов строк доступно в документации Python по типу str.

Частые вопросы

Чем len() отличается от count()?

len() возвращает общее число символов во всей строке, а count() — сколько раз в ней встречается конкретный символ или подстрока. Для задачи «какая длина строки» нужен len(), для «сколько букв а» — count().

Считает ли len() пробелы?

Да. len() учитывает все символы, включая пробелы, табуляции, знаки препинания и переносы строк. Чтобы исключить пробелы, сначала удалите их: len(text.replace(" ", "")).

Почему len() эмодзи возвращает больше одного?

Потому что len() считает кодовые точки Unicode, а не видимые знаки. Составные эмодзи и символы с комбинируемыми акцентами состоят из нескольких кодовых точек, поэтому длина оказывается больше единицы.

Как посчитать символы без учёта регистра?

Приведите строку к одному регистру перед подсчётом: text.lower().count("а") или Counter(text.lower()). Тогда «А» и «а» будут учтены вместе.

Как посчитать количество слов, а не символов?

Используйте len(text.split()): метод split() разбивает строку по пробелам, а len() считает получившиеся слова.

Заключение

Для подсчёта количества символов в строке Python в подавляющем большинстве случаев достаточно функции len(). Когда нужна детализация, язык даёт готовые инструменты: count() для конкретного символа, Counter для частоты всех символов и предикаты isalpha(), isdigit(), isspace() для подсчёта по категориям. Выбирайте метод под задачу по таблице выше и не забывайте про юникод-нюанс, если работаете с эмодзи и многоязычным текстом.

Читайте также

3 материала