Что такое строка
Строка (str) — это неизменяемая последовательность символов. В Python строки создаются с помощью одинарных, двойных или тройных кавычек:
single = 'Hello'
double = "Hello"
multi = """First line
Second line"""
empty = ""
print(type(single)) # <class 'str'>
Так как строка — это последовательность, к ней применимы общие операции: получение длины, индексация, срезы, перебор в цикле и проверка вхождения.
Неизменяемость строк
В Python строки являются неизменяемыми (immutable). После создания строки её содержимое нельзя изменить напрямую. Любая операция, которая кажется изменением, на самом деле создаёт новую строку.
s = "Hello"
print(s + " world!") # Hello world!
print(s) # Hello — исходная строка не изменилась
s = s + " world!"
print(s) # Hello world! — переменная ссылается на новый объект
s[0] = 'h' вызовет TypeError.
Кодировки: ASCII, Unicode, UTF-8
Кодировка — это способ преобразования символов в числа, которые компьютер может хранить и обрабатывать.
ASCII
ASCII — одна из первых кодировок. Она использует 7 бит и кодирует 128 символов (коды от 0 до 127): управляющие символы, цифры, буквы английского алфавита и основную пунктуацию.
Unicode
Unicode — глобальный стандарт, который присваивает каждому символу уникальный числовой код (кодовую точку). В Unicode более 143 000 символов: алфавиты разных языков, математические знаки, эмодзи и технические символы.
UTF-8
UTF-8 — популярная кодировка для представления Unicode. Каждый символ занимает от 1 до 4 байт:
- 1 байт — символы ASCII (
0–127). - 2 байта — символы с кодами
128–2047(кириллица, греческий). - 3 байта — символы с кодами
2048–65535(иероглифы). - 4 байта — редкие символы и эмодзи.
Методы строк
Метод — это функция, привязанная к объекту. Строки поддерживают множество методов для работы с текстом. Важно помнить: строковые методы возвращают новую строку, не изменяя исходную.
text = " Hello, Python! "
print(text.upper()) # " HELLO, PYTHON! "
print(text.lower()) # " hello, python! "
print(text.strip()) # "Hello, Python!"
print(text.replace("Python", "World")) # " Hello, World! "
print(text.find("Py")) # 9
print(text.count("l")) # 2
print(text) # исходная строка не изменилась
Методы encode и decode
Метод encode() преобразует строку в байты по заданной кодировке. Метод decode() делает обратное — переводит байты в строку.
text = "Привет"
encoded = text.encode("utf-8")
print(encoded) # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
decoded = encoded.decode("utf-8")
print(decoded) # Привет
Функции ord() и chr()
ord() возвращает код Unicode символа, а chr() — символ по его коду.
print(ord("A")) # 65
print(ord("a")) # 97
print(ord(" ")) # 32
print(chr(65)) # A
print(chr(97)) # a
print(chr(32)) # (пробел)
Сравнение строк
Строки сравниваются лексикографически, символ за символом, на основе кодов Unicode. Регистр важен: заглавные буквы имеют меньшие коды, чем строчные.
print("apple" == "apple") # True
print("apple" != "ap ple") # True
print("apple" < "banana") # True, 'a' < 'b'
print("Apple" < "banana") # True, 'A' < 'b'
print("apple" > "Apple") # True, 'a' > 'A'
print("cat" > "catalog") # False — "cat" короче и является префиксом
Функция len()
len() возвращает количество символов в строке.
text = "Python"
print(len(text)) # 6
empty = ""
print(len(empty)) # 0
Индексация строк
В Python индексация начинается с 0. Отрицательные индексы позволяют обращаться к символам с конца: -1 — последний символ, -2 — предпоследний и т.д.
text = "Python"
print(text[0]) # P
print(text[2]) # t
print(text[-1]) # n
print(text[-3]) # h
# Проверка границ
index = 5
if index < len(text):
print(text[index])
else:
print("Индекс вне диапазона!")
IndexError: text[10] для строки длины 6.
Срезы строк
Срез позволяет получить подстроку. Синтаксис: text[start:end:step]. Начальный индекс включается, конечный — нет.
text = "Python programming"
print(text[0:6]) # Python
print(text[:6]) # Python — с начала строки
print(text[7:]) # programming — до конца строки
print(text[:]) # копия всей строки
print(text[-11:]) # programming
print(text[0:12:2]) # Pto rg
print(text[::-1]) # gnimmargorp nohtyP
При неправильном порядке индексов срез возвращает пустую строку, а не ошибку:
print(text[14:7]) # пустая строка
print(text[-4:-11]) # пустая строка
Оператор принадлежности in
Оператор in проверяет, содержится ли подстрока в строке. Комбинация not in проверяет отсутствие.
text = "Python programming"
print("Python" in text) # True
print("Hello" in text) # False
print("Java" not in text) # True
Перебор строки
Строка — итерируемый объект, поэтому по ней можно пройти циклом for:
text = "Hello"
for char in text:
print(char)
# Подсчёт гласных
vowels = "aeiou"
count = 0
for char in text.lower():
if char in vowels:
count += 1
print(f"Vowels: {count}")
Escape-последовательности и raw-строки
Символ обратного слэша \ используется для специальных символов: \n — новая строка, \t — табуляция, \\ — сам обратный слэш.
text = "Line 1\nLine 2\tTabbed"
print(text)
path = r"C:\Users\Admin\file.txt"
print(path) # C:\Users\Admin\file.txt
f-строки
f-строки — современный способ вставки значений в строку. Перед открывающей кавычкой ставится буква f, а выражения заключаются в фигурные скобки.
name = "Alice"
age = 30
print(f"Hello, {name}! Next year you will be {age + 1}.")