Работа со строковыми символами в Python: от базовых операций до продвинутых приёмов
Строковые символы в Python: основные операции и практические приёмы
Как обратиться к конкретному символу в строке?
Строка представляет собой упорядоченную последовательность символов. Доступ к отдельному символу осуществляется по индексу (начиная с 0). Отрицательный индекс отсчитывает с конца.
s = 'Привет'
print(s[0]) # П
print(s[-1]) # т
print(s[1:4]) # ривстроковые символы python (строковые символы в python)
Срез возвращает подстроку, а не один символ. Для получения одного символа указывается один индекс.
Как перебрать все символы строки?
Цикл for последовательно возвращает каждый символ.
for ch in 'Python':
print(ch)
Если нужны индексы, используйте enumerate.
for i, ch in enumerate('abc'):
print(i, ch)
Как получить Unicode код символа и создать символ по коду?
Функция ord() возвращает целое число, представляющее Unicode-код переданного символа. Функция chr() преобразует целое число обратно в символ.
code = ord('A') # 65
symbol = chr(65) # 'A'
print(ord('ф')) # 1092
print(chr(1092)) # 'ф'
ord() принимает только строку из одного символа; передача пустой строки или нескольких символов вызовет TypeError. chr() принимает целое число в диапазоне 0x10FFFF (максимальный Unicode-код).
Как проверить, является ли символ буквой, цифрой или пробелом?
Строковые методы isalpha(), isdigit(), isspace() и другие возвращают True для строки, полностью состоящей из соответствующих символов. Для одного символа они тоже работают.
print('A'.isalpha()) # True
print('5'.isdigit()) # True
print(' '.isspace()) # True
print('!'.isalnum()) # False (не буква и не цифра)
Метод isalnum() возвращает True для буквенно-цифровых символов.
Как вставить специальные символы (перевод строки, табуляция, Unicode)?
Экранирование с помощью обратной косой черты \ позволяет включить в строку специальные символы: \n (новая строка), \t (табуляция), \\ (сама обратная косая), \' и \" (кавычки). Для Unicode символов используются последовательности \xNN (2 шестнадцатеричные цифры), \uNNNN (4 цифры) и \UNNNNNNNN (8 цифр).
print('Первая строка\nВторая строка')
print('Знак табуляции\tпосле него')
print('Символ ©: \u00A9')
print('Символ \'кавычки\' внутри строки: \'')
Сырые строки (r'...') отключают экранирование, что удобно для регулярных выражений или путей Windows.
path = r'C:\Users\name' # без экранирования
'C:\new' воспримет \n как перевод строки.
Дополнительные примеры работы со строковыми символами
Далее приведены расширенные сценарии, которые редко встречаются в базовых учебниках.
Пример 1: использование enumerate для нумерации символов
text = 'Python'
for idx, char in enumerate(text):
print(f'Индекс {idx}: {char}')
Индекс 0: P Индекс 1: y Индекс 2: t Индекс 3: h Индекс 4: o Индекс 5: n
Пример 2: генератор списка для фильтрации символов по условию (только буквы)
s = 'a1b2c3!d'
letters = [ch for ch in s if ch.isalpha()]
print(letters) # ['a', 'b', 'c', 'd']
Пример 3: проверка вхождения символа с помощью оператора in
print('@' in 'user@example.com') # True
print('z' in 'abc') # False
Пример 4: изменение регистра отдельного символа и его проверка
ch = 'f'
if ch.islower():
ch_upper = ch.upper()
print(f'Было {ch}, стало {ch_upper}')
Пример 5: поиск индекса символа с помощью find и index, обработка ошибок
text = 'hello world'
idx = text.find('o') # 4
print(idx)
idx2 = text.find('x') # -1 (не найдено)
try:
idx3 = text.index('x') # ValueError
except ValueError:
print('Символ не найден')
Пример 6: срез с шагом для получения символов через один
s = 'abcdef'
print(s[::2]) # 'ace'
print(s[1::2]) # 'bdf'
Пример 7: замена символа в строке (строка неизменяема, поэтому используется replace или конкатенация среза)
text = 'hello'
new_text = text.replace('l', 'L') # 'heLLo'
# или через срезы:
idx = text.find('l')
new_text2 = text[:idx] + 'L' + text[idx+1:] # замена первого вхождения
print(new_text2) # 'heLlo'
Пример 8: использование map для преобразования всех символов (например, в их коды)
codes = list(map(ord, 'ABC'))
print(codes) # [65, 66, 67]
Пример 9: работа с суррогатными парами Unicode (символы вне BMP)
s = '?' # эмодзи
print(len(s)) # 2 (в Python 3 строка состоит из Unicode-символов, но эмодзи занимает 2 кодовые единицы)
print(list(s)) # ['\U0001f600'] - на самом деле один символ, но в списке отобразится как один элемент
# Важно: для правильного обхода графем используйте regex или библиотеку grapheme
Пример 10: создание строки из символов с определёнными кодами
codes = [72, 101, 108, 108, 111]
symbols = ''.join(chr(c) for c in codes)
print(symbols) # 'Hello'