Строки и символы в языке Python

Раздел: Строки -> Манипуляции со строками

Основные операции со строками и символами

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

Строка в Python представляет собой неизменяемую последовательность символов Unicode. Доступ к символу осуществляется по индексу (начиная с 0) или с использованием среза.

s = 'Привет'
print(s[0])   # 'П'
print(s[-1])  # 'т'

Python строка символ (строка и символы в python)

Для получения подстроки применяют срез: s[1:4] вернет 'рив'.

Ошибка: запрос индекса, выходящего за границы строки, вызывает IndexError. Перед обращением проверяйте длину строки функцией len().

Как преобразовать строку к верхнему или нижнему регистру?

Используйте методы .upper() и .lower(). Они создают новую строку, исходная не меняется.

s = 'Python'
print(s.upper())  # 'PYTHON'
print(s.lower())  # 'python'

Методы не изменяют символы, для которых нет регистра (цифры, знаки). Работают корректно с Unicode.

Как проверить, из каких символов состоит строка?

Для проверки типа символов применяют .isalpha(), .isdigit(), .isalnum() и другие.

'abc'.isalpha()   # True
'123'.isdigit()   # True
'a1'.isalnum()    # True
' '.isspace()     # True

Эти методы возвращают False для пустой строки. Для проверки каждого символа потребуется цикл.

Как получить числовой код символа и обратно?

Функция ord() возвращает Unicode-код символа, chr() преобразует код обратно в символ.

print(ord('A'))   # 65
print(chr(97))    # 'a'

Ошибка TypeError возникает, если передать строку из нескольких символов. ord() принимает только один символ.

Расширенные примеры работы со строками

Ниже приведены нетривиальные примеры обработки строк и символов.

Итерация по символам с генерацией списка кодов

Пример
s = 'Привет'
codes = [ord(ch) for ch in s]
print(codes)
[1055, 1088, 1080, 1074, 1077, 1090]

Проверка, является ли строка палиндромом

Пример
def is_palindrome(text):
    cleaned = ''.join(ch.lower() for ch in text if ch.isalnum())
    return cleaned == cleaned[::-1]

print(is_palindrome('А роза упала на луну Азора'))
True

Замена всех символов с помощью str.translate

Пример
trans_table = str.maketrans({'а': '@', 'е': '3'})
text = 'атлант'
print(text.translate(trans_table))
@тл@нт

Работа с Unicode и эмодзи

Пример
emoji_symbol = chr(0x1F600)
print(emoji_symbol)  # ?
# Длина эмодзи может быть больше одного символа (суррогатные пары)
print(len(emoji_symbol))  # 2 (в Python строки из Unicode, но некоторые эмодзи кодируются двумя кодовыми точками)

Разделение строки на символы с учётом кластеров графем (библиотека regex)

Для корректного разбиения строки на видимые символы (например, эмодзи с комбинирующими символами) требуется модуль regex с флагом VERSION1.

Пример
import regex
text = 'ç'  # c + комбинирующая седилья
chars = regex.findall(r'\X', text)
print(chars)  # ['ç'] - один кластер

Сравнение строк без учёта регистра и диакритики

Пример
import unicodedata
def normalize_caseless(text):
    return unicodedata.normalize('NFKD', text.casefold())

print(normalize_caseless('Café') == normalize_caseless('CAFÉ'))  # True

Форматирование строк с помощью f-строк и методов format

Пример
name = 'Иван'
age = 30
print(f'{name:>10} {age:03d}')
print('{1} - {0}'.format(age, name))
      Иван 030
Иван - 30

Строка и символы в Python - comments

En
Python строка символ (python)