Строки (тип данных str) в Python представляют собой последовательности символов, заключённые в одинарные ('...'), двойные ("..."), тройные одинарные ('''...''') или тройные двойные кавычки ("""...""").
Строки в Python являются неизменяемыми (immutable), что означает, что после их создания нельзя изменить отдельные символы внутри строки.
Основные аспекты работы со строками в Python:
1. Создание строк
- Строки можно создавать с использованием одинарных или двойных кавычек:
s1 = 'Привет, мир!'
s2 = "Hello, world!"
- Тройные кавычки используются для создания многострочных строк:
s3 = '''Многострочная
строка'''
2. Экранирование символов
Для включения специальных символов, таких как новая строка (\n) или табуляция (\t), используется символ обратного слэша \:
s4 = "Строка с новой строкой\nи табуляцией\tвнутри."
Для включения в строку кавычек того же типа, что и у самой строки, также используется экранирование:
s5 = 'Это — строка с кавычкой: \''
3. Сырые (raw) строки
Если перед строкой поставить символ r или R, Python будет трактовать её как "сырую", и экранирование символов игнорируется:
s6 = r"Сырая строка: \n не переносит строку"
4. Индексация и срезы
Строки поддерживают доступ к отдельным символам по индексу:
s = "Python"
print(s[0]) # 'P'
print(s[-1]) # 'n' (отрицательные индексы отсчитываются с конца)
Срезы позволяют извлечь подстроку:
print(s[0:3]) # 'Pyt' (символы с 0 по 2 включительно)
print(s[:3]) # 'Pyt' (с начала до 3)
print(s[3:]) # 'hon' (с 3 и до конца)
print(s[::2]) # 'Pto' (каждый второй символ)
5. Операции со строками
- Конкатенация: строки можно складывать:
s7 = "Hello" + " " + "World!" # 'Hello World!'
- Повторение строки:
s8 = "ha" * 3 # 'hahaha'
- Проверка вхождения:
'Py' in "Python" # True
6. Методы строк
Python предоставляет множество встроенных методов для работы со строками:
- Преобразование регистра:
s = "Python"
print(s.upper()) # 'PYTHON'
print(s.lower()) # 'python'
- Удаление пробелов:
s = " hello "
print(s.strip()) # 'hello' (убирает пробелы с обоих концов)
print(s.lstrip()) # 'hello ' (убирает только слева)
print(s.rstrip()) # ' hello' (убирает только справа)
- Поиск и замена:
s = "Hello, world!"
print(s.find("world")) # 7 (индекс подстроки)
print(s.replace("world", "Python")) # 'Hello, Python!'
- Разбиение и соединение:
s = "apple,banana,cherry"
print(s.split(",")) # ['apple', 'banana', 'cherry']
print(" ".join(['Hello', 'world'])) # 'Hello world'
7. Форматирование строк
Python предоставляет несколько возможностей форматирования строк:
- Оператор %:
s = "Привет, %s!" % "Мир" # 'Привет, Мир!'
- Метод .format():
s = "Привет, {}!".format("Мир") # 'Привет, Мир!'
- f-строки (f-strings) — начиная с Python 3.6:
name = "Мир"
s = f"Привет, {name}!" # 'Привет, Мир!'
8. Изменяемость строк
Строки в Python неизменяемы, то есть после создания строки её нельзя изменить. Любые операции, которые "изменяют" строку, на самом деле создают новую строку:
s = "Hello"
s = s + " World" # создается новая строка 'Hello World', а переменной s присваивается ссылка на неё
9. Многострочные и длинные строки
Для длинных строк или многострочных значений можно использовать тройные кавычки:
long_text = """Это длинная строка,
которая может занимать несколько строк кода."""
10. Кодировка
В Python строки хранятся в кодировке Unicode, что позволяет работать с символами из разных языков и алфавитов:
s = "Привет, мир!"
Сравнение строк
Сравнение строк в Python происходит на основе лексикографического порядка, что означает сравнение символов строк по их Unicode-кодам. Этот порядок аналогичен алфавитному, но он может зависеть от регистра символов (заглавные и строчные буквы имеют разные коды в Unicode).
Основные операторы для сравнения строк:
1. Оператор равенства (==): проверяет, равны ли строки.
2. Оператор неравенства (!=): проверяет, не равны ли строки.
3. Операторы больше (>) и меньше (<): сравнивают строки лексикографически.
4. Операторы больше или равно (>=) и меньше или равно (<=): также сравнивают строки по лексикографическому порядку с учётом равенства.
Примеры сравнения строк:
1. Сравнение на равенство и неравенство:
2. Сравнение по лексикографическому порядку: Лексикографический порядок сравнивает строки как в словаре:
3. Особенности сравнения с учётом регистра: В Unicode заглавные буквы имеют меньшие коды, чем строчные, поэтому строки с заглавными буквами будут считаться "меньшими" в лексикографическом порядке.
Для сравнения строк без учёта регистра можно использовать метод .lower() или .upper():
print(s1.lower() == s2.lower()) # True, игнорируя регистр
4. Сравнение строк разной длины: Лексикографическое сравнение продолжается до тех пор, пока не будет найден первый различающийся символ. Если одна строка является префиксом другой, то более короткая строка будет "меньше":
5. Сравнение строк с не-латинскими символами: Строки с символами из других алфавитов будут сравниваться по их Unicode-кодам:
s1 = 'асса' #русский
s2 = 'acca' #english
s3 = 'super' #english
print(s1>s2) #true, т.к. английские символы имеют меньшие коды чем русские
print(s1>s3) #true т.к. английские символы имеют меньшие коды чем русские
Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?
Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам