Строки в Python — это последовательности символов, заключенные в одинарные ('), двойные (") или тройные кавычки (''' или """). Строки используются для представления текстовых данных и являются одним из основных типов данных в Python. В Python строки неизменяемы (immutable), что означает, что их нельзя изменить после создания.
Что такое строки в Python
Строка в Python — это упорядоченная последовательность символов Unicode. Строки могут содержать буквы, цифры, специальные символы и пробелы. Каждый символ в строке имеет свой индекс, начиная с 0.
Создание строк в Python
Одинарные и двойные кавычки
Строки можно создавать с помощью одинарных или двойных кавычек. Функционально они эквивалентны, но их выбор может зависеть от содержимого строки.
str1 = 'Hello, World!'
str2 = "Hello, World!"
print(str1) # Hello, World!
print(str2) # Hello, World!
Тройные кавычки для многострочных строк
Тройные кавычки (''' или """) используются для создания многострочных строк или строк, содержащих кавычки внутри.
str3 = """Это
многострочная
строка"""
str4 = '''Эта строка содержит "кавычки" внутри'''
print(str3)
print(str4)
Экранированные символы в строках
Экранированные символы позволяют включать специальные символы в строку с помощью обратного слеша ().
newline = "Первая строка\nВторая строка"
tabbed = "Первая строка\tВторая строка"
escaped_quote = "Он сказал: \"Привет!\""
print(newline)
print(tabbed)
print(escaped_quote)
Основные экранированные символы
\n— перевод строки\t— табуляция\\— обратный слеш\'— одинарная кавычка\"— двойная кавычка\r— возврат каретки\b— забой (backspace)
Операции со строками в Python
Конкатенация строк
Конкатенация (объединение) строк выполняется с помощью оператора +.
str1 = "Hello"
str2 = "World"
str3 = str1 + ", " + str2 + "!"
print(str3) # Hello, World!
Повторение строк
Строки можно повторять с помощью оператора *.
str1 = "Hi! "
str2 = str1 * 3
print(str2) # Hi! Hi! Hi!
Индексация строк
Каждый символ строки имеет индекс, начиная с 0. Отрицательные индексы отсчитываются с конца строки.
str1 = "Hello"
print(str1[0]) # H
print(str1[-1]) # o
print(str1[1]) # e
print(str1[-2]) # l
Срезы строк (slicing)
Срезы позволяют извлекать части строки, используя синтаксис [start:end:step].
str1 = "Hello, World!"
print(str1[0:5]) # Hello
print(str1[7:]) # World!
print(str1[:5]) # Hello
print(str1[::2]) # Hlo ol!
print(str1[::-1]) # !dlroW ,olleH
Перебор строки в цикле
text = "1516 the best"
for i in range(len(text)):
if text[i] in "1234567890":
print(text[i])
# Вывод: 1, 5, 1, 6
# Более элегантный способ
for char in text:
if char.isdigit():
print(char)
Методы строк в Python
таблица с основными методами и функциями для работы со строками в Python:
Методы строк
| Метод | Описание | Пример |
|---|---|---|
upper() |
Преобразует в верхний регистр | "hello".upper() → "HELLO" |
lower() |
Преобразует в нижний регистр | "HELLO".lower() → "hello" |
capitalize() |
Делает первую букву заглавной | "hello".capitalize() → "Hello" |
title() |
Делает заглавной первую букву каждого слова | "hello world".title() → "Hello World" |
swapcase() |
Меняет регистр символов | "Hello".swapcase() → "hELLO" |
strip() |
Удаляет пробелы с начала и конца | " hello ".strip() → "hello" |
lstrip() |
Удаляет пробелы слева | " hello ".lstrip() → "hello " |
rstrip() |
Удаляет пробелы справа | " hello ".rstrip() → " hello" |
split() |
Разделяет строку на список | "a,b,c".split(",") → ["a", "b", "c"] |
join() |
Соединяет элементы списка в строку | ",".join(["a", "b", "c"]) → "a,b,c" |
replace() |
Заменяет подстроку | "hello".replace("l", "x") → "hexxo" |
find() |
Находит индекс подстроки | "hello".find("l") → 2 |
rfind() |
Находит последний индекс подстроки | "hello".rfind("l") → 3 |
index() |
Находит индекс (с ошибкой если не найдено) | "hello".index("l") → 2 |
rindex() |
Находит последний индекс (с ошибкой) | "hello".rindex("l") → 3 |
count() |
Подсчитывает количество вхождений | "hello".count("l") → 2 |
startswith() |
Проверяет начало строки | "hello".startswith("he") → True |
endswith() |
Проверяет конец строки | "hello".endswith("lo") → True |
isdigit() |
Проверяет, состоит ли из цифр | "123".isdigit() → True |
isalpha() |
Проверяет, состоит ли из букв | "abc".isalpha() → True |
isalnum() |
Проверяет, состоит ли из букв и цифр | "abc123".isalnum() → True |
isspace() |
Проверяет, состоит ли из пробелов | " ".isspace() → True |
islower() |
Проверяет нижний регистр | "hello".islower() → True |
isupper() |
Проверяет верхний регистр | "HELLO".isupper() → True |
istitle() |
Проверяет заглавные буквы слов | "Hello World".istitle() → True |
center() |
Центрирует строку | "hi".center(10) → " hi " |
ljust() |
Выравнивает по левому краю | "hi".ljust(10) → "hi " |
rjust() |
Выравнивает по правому краю | "hi".rjust(10) → " hi" |
zfill() |
Заполняет нулями слева | "42".zfill(5) → "00042" |
encode() |
Кодирует строку в байты | "hello".encode("utf-8") → b'hello' |
format() |
Форматирует строку | "Hello {}".format("World") → "Hello World" |
format_map() |
Форматирует с использованием словаря | "Hello {name}".format_map({"name": "World"}) |
partition() |
Разделяет строку на 3 части | "a-b-c".partition("-") → ("a", "-", "b-c") |
rpartition() |
Разделяет справа на 3 части | "a-b-c".rpartition("-") → ("a-b", "-", "c") |
splitlines() |
Разделяет по строкам | "a\nb\nc".splitlines() → ["a", "b", "c"] |
expandtabs() |
Заменяет табуляции пробелами | "a\tb".expandtabs(4) → "a b" |
translate() |
Переводит символы по таблице | "hello".translate(str.maketrans("l", "x")) → "hexxo" |
casefold() |
Агрессивное приведение к нижнему регистру | "Hello".casefold() → "hello" |
Встроенные функции для работы со строками
| Функция | Описание | Пример |
|---|---|---|
len() |
Возвращает длину строки | len("hello") → 5 |
str() |
Преобразует в строку | str(123) → "123" |
repr() |
Возвращает представление строки | repr("hello") → "'hello'" |
ord() |
Возвращает Unicode код символа | ord("A") → 65 |
chr() |
Возвращает символ по Unicode коду | chr(65) → "A" |
ascii() |
Возвращает ASCII представление | ascii("héllo") → "'h\\xe9llo'" |
bin() |
Преобразует в двоичную строку | bin(10) → "0b1010" |
oct() |
Преобразует в восьмеричную строку | oct(10) → "0o12" |
hex() |
Преобразует в шестнадцатеричную строку | hex(10) → "0xa" |
format() |
Форматирует значение | format(3.14, ".2f") → "3.14" |
sorted() |
Сортирует символы строки | sorted("hello") → ['e', 'h', 'l', 'l', 'o'] |
reversed() |
Возвращает обратный итератор | list(reversed("hello")) → ['o', 'l', 'l', 'e', 'h'] |
enumerate() |
Возвращает пары (индекс, символ) | list(enumerate("hi")) → [(0, 'h'), (1, 'i')] |
zip() |
Объединяет строки посимвольно | list(zip("abc", "123")) → [('a', '1'), ('b', '2'), ('c', '3')] |
map() |
Применяет функцию к каждому символу | list(map(ord, "abc")) → [97, 98, 99] |
filter() |
Фильтрует символы по условию | list(filter(str.isalpha, "a1b2c")) → ['a', 'b', 'c'] |
any() |
Проверяет, есть ли True среди символов | any(c.isdigit() for c in "a1b") → True |
all() |
Проверяет, все ли символы True | all(c.isalpha() for c in "abc") → True |
sum() |
Суммирует коды символов | sum(ord(c) for c in "abc") → 294 |
min() |
Находит минимальный символ | min("hello") → "e" |
max() |
Находит максимальный символ | max("hello") → "o" |
Специальные методы для создания строк
| Метод | Описание | Пример |
|---|---|---|
str.maketrans() |
Создает таблицу перевода | str.maketrans("abc", "123") |
bytes.decode() |
Декодирует байты в строку | b"hello".decode("utf-8") → "hello" |
bytearray.decode() |
Декодирует массив байтов | bytearray(b"hello").decode() → "hello" |
Эта таблица охватывает основные методы и функции для работы со строками в Python. Каждый метод имеет свое предназначение и может быть полезен в различных ситуациях при обработке текстовых данных.
Определение длины строки
Функция len() возвращает количество символов в строке.
str1 = "Hello"
print(len(str1)) # 5
Изменение регистра
str1 = "Hello, World!"
print(str1.lower()) # hello, world!
print(str1.upper()) # HELLO, WORLD!
print(str1.title()) # Hello, World!
print(str1.capitalize()) # Hello, world!
Удаление пробелов
str1 = " Hello, World! "
print(str1.strip()) # "Hello, World!"
print(str1.lstrip()) # "Hello, World! "
print(str1.rstrip()) # " Hello, World!"
Замена подстрок
str1 = "Hello, World!"
print(str1.replace("World", "Python")) # Hello, Python!
print(str1.replace("l", "L", 2)) # HeLLo, World!
Разделение и объединение строк
str1 = "Hello, World!"
list1 = str1.split(", ")
print(list1) # ['Hello', 'World!']
str2 = ", ".join(list1)
print(str2) # Hello, World!
# Разделение по строкам
multiline = "line1\nline2\nline3"
lines = multiline.splitlines()
print(lines) # ['line1', 'line2', 'line3']
Поиск подстрок
str1 = "Hello, World!"
print(str1.find("o")) # 4
print(str1.rfind("o")) # 8
print(str1.find("Python")) # -1
print(str1.index("World")) # 7
print(str1.count("l")) # 3
Проверка начала и конца строки
str1 = "Hello, World!"
print(str1.startswith("Hello")) # True
print(str1.endswith("World!")) # True
print(str1.startswith("Hi")) # False
Проверочные методы строк
Проверка содержимого строки
str1 = "Hello"
str2 = "12345"
str3 = "Hello123"
str4 = " "
print(str1.isalpha()) # True - только буквы
print(str2.isdigit()) # True - только цифры
print(str3.isalnum()) # True - буквы и цифры
print(str4.isspace()) # True - только пробелы
Проверка регистра
str1 = "hello"
str2 = "HELLO"
str3 = "Hello World"
print(str1.islower()) # True
print(str2.isupper()) # True
print(str3.istitle()) # True
Дополнительные проверки
str1 = "123"
str2 = "hello123"
str3 = "HELLO123"
print(str1.isdecimal()) # True
print(str1.isnumeric()) # True
print(str2.isidentifier()) # True
print(str3.isprintable()) # True
Форматирование строк в Python
Старый стиль форматирования (%)
name = "Alice"
age = 25
str1 = "My name is %s and I am %d years old." % (name, age)
print(str1) # My name is Alice and I am 25 years old.
Метод format()
name = "Alice"
age = 25
str1 = "My name is {} and I am {} years old.".format(name, age)
print(str1) # My name is Alice and I am 25 years old.
# С именованными параметрами
str2 = "My name is {name} and I am {age} years old.".format(name=name, age=age)
print(str2)
F-строки (f-strings) - рекомендуемый способ
F-строки (форматированные строковые литералы) — это самый современный и удобный способ форматирования строк в Python 3.6+.
name = "Alice"
age = 25
str1 = f"My name is {name} and I am {age} years old."
print(str1) # My name is Alice and I am 25 years old.
Форматирование чисел
pi = 3.14159
price = 1234.56
print(f"Число Пи: {pi:.2f}") # Число Пи: 3.14
print(f"Цена: {price:.2f}") # Цена: 1234.56
print(f"Цена: {price:,.2f}") # Цена: 1,234.56
print(f"Процент: {0.95:.2%}") # Процент: 95.00%
Работа с многострочными строками
# Многострочная строка
poem = """Розы красные,
Фиалки синие,
Python прекрасен,
И это истина."""
print(poem)
# Использование для документации
def my_function():
"""
Это многострочная документация функции.
Она может содержать подробное описание
параметров и возвращаемых значений.
"""
pass
Кодирование и декодирование строк
# Кодирование строки в байты
text = "Привет, мир!"
encoded = text.encode('utf-8')
print(encoded) # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82, \xd0\xbc\xd0\xb8\xd1\x80!'
# Декодирование байтов в строку
decoded = encoded.decode('utf-8')
print(decoded) # Привет, мир!
Практические примеры работы со строками
Проверка email
email = "user@example.com"
if "@" in email and "." in email:
print("Email корректный")
Подсчет символов
text = "Hello World"
vowels = "aeiouAEIOU"
vowel_count = sum(1 for char in text if char in vowels)
print(f"Количество гласных: {vowel_count}")
Очистка строки
text = " Hello, World! "
cleaned = " ".join(text.split())
print(cleaned) # "Hello, World!"
Строки в Python предоставляют мощные возможности для работы с текстовыми данными. Понимание основных методов и операций со строками является фундаментальным навыком для любого Python-разработчика. Регулярное использование этих методов поможет вам эффективно обрабатывать и манипулировать текстовыми данными в ваших проектах.