Строки в Python: создание, форматирование и манипуляции
Строки в Python
В этом уроке вы научитесь создавать, форматировать, изменять и удалять строки в Python. Также вы познакомитесь с различными операциями и функциями строк.
Видео: Строки в Python
Что такое строка в Python?
Строка — это последовательность символов.
Символ — просто знак. Например, английский язык имеет 26 символов.
Компьютеры не работают с символами, они работают с числами (бинарными). Хотя вы видите символы на экране, внутри они хранятся и манипулируются как комбинации нулей и единиц.
Преобразование символа в число называется кодировкой, обратный процесс — декодировкой. ASCII и Unicode — популярные кодировки.
В Python строка — это последовательность Unicode-символов. Unicode был введён, чтобы включить все символы всех языков и привести кодировку к единообразию. Подробнее о Unicode в Python Unicode.
Как создать строку в Python?
Строки создаются заключением символов в одинарные или двойные кавычки. Тройные кавычки также допускаются, обычно для многострочных строк и docstrings.
# определение строк в Python
# все следующие эквивалентны
my_string = 'Hello'
print(my_string)
my_string = "Hello"
print(my_string)
my_string = '''Hello'''
print(my_string)
# тройные кавычки могут занимать несколько строк
my_string = """Hello, welcome to the world of Python"""
print(my_string)
При запуске вывод будет:
Hello Hello Hello Hello, welcome to the world of Python
Как получить доступ к символам строки?
Отдельные символы доступны через индексацию, диапазон — через срезы. Индекс начинается с 0. Попытка доступа за пределами диапазона вызывает IndexError. Индекс должен быть целым числом, float и другие типы вызывают TypeError.
Python позволяет отрицательную индексацию для последовательностей.
Индекс -1 ссылается на последний элемент, -2 — на предпоследний и так далее. Диапазон элементов доступен через оператор среза : (двоеточие).
# Доступ к символам строки в Python
str = 'programiz'
print('str = ', str)
# первый символ
print('str[0] = ', str[0])
# последний символ
print('str[-1] = ', str[-1])
# срез со 2-го по 5-й символ
print('str[1:5] = ', str[1:5])
# срез с 6-го по 2-й с конца
print('str[5:-2] = ', str[5:-2])
Вывод программы:
str = programiz str[0] = p str[-1] = z str[1:5] = rogr str[5:-2] = am
При попытке доступа к индексу за пределами диапазона или использования нецелых чисел возникнут ошибки.
# индекс должен быть в диапазоне
>>> my_string[15]
...
IndexError: string index out of range
# индекс должен быть целым
>>> my_string[1.5]
...
TypeError: string indices must be integers
Срезы лучше визуализировать, считая индексы расположенными между элементами, как показано ниже.
Для доступа к диапазону нужен индекс, который вырежет нужную часть строки.

Как изменить или удалить строку?
Строки неизменяемы. Это означает, что элементы строки нельзя изменить после присваивания. Можно просто переприсвоить другое строковое значение тому же имени.
>>> my_string = 'programiz'
>>> my_string[5] = 'a'
...
TypeError: 'str' object does not support item assignment
>>> my_string = 'Python'
>>> my_string
'Python'
Нельзя удалить или убрать символы из строки. Но удалить строку целиком можно ключевым словом del.
>>> del my_string[1]
...
TypeError: 'str' object doesn't support item deletion
>>> del my_string
>>> my_string
...
NameError: name 'my_string' is not defined
Операции со строками в Python
Существует множество операций со строками, что делает их одним из самых используемых типов данных в Python.
Подробнее о типах данных в Python: Python Data Types
Конкатенация двух и более строк
Объединение двух и более строк в одну называется конкатенацией.
В Python для этого используется оператор +. Простое написание двух строковых литералов вместе тоже конкатенирует их.
Оператор * повторяет строку заданное число раз.
# Операции со строками в Python
str1 = 'Hello'
str2 = 'World!'
# используя +
print('str1 + str2 = ', str1 + str2)
# используя *
print('str1 * 3 =', str1 * 3)
Вывод:
str1 + str2 = HelloWorld! str1 * 3 = HelloHelloHello
Написание двух строковых литералов вместе тоже конкатенирует их, как оператор +.
Для конкатенации строк в разных строках можно использовать скобки.
>>> # два строковых литерала вместе
>>> 'Hello ''World!'
'Hello World!'
>>> # используя скобки
>>> s = ('Hello '
... 'World')
>>> s
'Hello World'
Итерация по строке
Можно перебирать строку циклом for. Пример подсчёта букв 'l' в строке.
# Итерация по строке
count = 0
for letter in 'Hello World':
if letter == 'l':
count += 1
print(count, 'letters found')
Вывод:
3 letters found
Проверка принадлежности подстроки
Можно проверить, существует ли подстрока в строке, с ключевым словом in.
>>> 'a' in 'program'
True
>>> 'at' not in 'battle'
False
Встроенные функции для работы со строками
Различные встроенные функции, работающие с последовательностями, работают и со строками.
Часто используемые: enumerate() и len(). enumerate() возвращает объект enumerate, содержащий индекс и значение всех элементов строки как пары. Полезно для итерации. len() возвращает длину (число символов) строки.
str = 'cold'
# enumerate()
list_enumerate = list(enumerate(str))
print('list(enumerate(str)) = ', list_enumerate)
# количество символов
print('len(str) = ', len(str))
Вывод:
list(enumerate(str)) = [(0, 'c'), (1, 'o'), (2, 'l'), (3, 'd')] len(str) = 4
Форматирование строк в Python
Escape-последовательности
Если нужно напечатать текст вроде He said, "What's there?", нельзя использовать ни одинарные, ни двойные кавычки — будет SyntaxError, так как текст содержит оба типа кавычек.
>>> print("He said, "What's there?"")
...
SyntaxError: invalid syntax
>>> print('He said, "What's there?"')
...
SyntaxError: invalid syntax
Один способ — использовать тройные кавычки. Альтернатива — escape-последовательности.
Escape-последовательность начинается с обратного слэша и интерпретируется иначе. Если строка в одинарных кавычках, все одинарные внутри должны быть экранированы. То же для двойных. Вот как представить вышеуказанный текст:
# используя тройные кавычки
print('''He said, "What's there?"''')
# экранирование одинарных кавычек
print('He said, "What\'s there?"')
# экранирование двойных кавычек
print("He said, \"What's there?\"")
Вывод:
He said, "What's there?" He said, "What's there?" He said, "What's there?"
Список всех escape-последовательностей, поддерживаемых Python:
| Escape-последовательность | Описание |
|---|---|
| \newline | Обратный слэш и новая строка игнорируются |
| \\ | Обратный слэш |
| \' | Одинарная кавычка |
| \" | Двойная кавычка |
| \a | ASCII Bell |
| \b | ASCII Backspace |
| \f | ASCII Formfeed |
| \n | ASCII Linefeed (новая строка) |
| \r | ASCII Carriage Return |
| \t | ASCII Horizontal Tab |
| \v | ASCII Vertical Tab |
| \ooo | Символ с восьмеричным значением ooo |
| \xHH | Символ с шестнадцатеричным значением HH |
Примеры:
>>> print("C:\\Python32\\Lib")
C:\Python32\Lib
>>> print("This is printed\nin two lines")
This is printed
in two lines
>>> print("This is \x48\x45\x58 representation")
This is HEX representation
Сырые строки (raw strings) для игнорирования escape-последовательностей
Иногда нужно игнорировать escape-последовательности внутри строки. Для этого поставьте r или R перед строкой. Это означает, что это сырая строка, и любые escape-последовательности внутри будут проигнорированы.
>>> print("This is \x61 \ngood example")
This is a
good example
>>> print(r"This is \x61 \ngood example")
This is \x61 \ngood example
Метод format() для форматирования строк
Метод format(), доступный у строкового объекта, очень универсален и мощен. Формат-строки содержат фигурные скобки {} как плейсхолдеры или поля замены, которые подставляются.
Можно использовать позиционные или именованные аргументы для указания порядка.
# Метод format() строки в Python
# порядок по умолчанию (неявный)
default_order = "{}, {} and {}".format('John','Bill','Sean')
print('\n--- Default Order ---')
print(default_order)
# порядок с позиционными аргументами
positional_order = "{1}, {0} and {2}".format('John','Bill','Sean')
print('\n--- Positional Order ---')
print(positional_order)
# порядок с именованными аргументами
keyword_order = "{s}, {b} and {j}".format(j='John',b='Bill',s='Sean')
print('\n--- Keyword Order ---')
print(keyword_order)
Вывод:
--- Default Order --- John, Bill and Sean --- Positional Order --- Bill, John and Sean --- Keyword Order --- Sean, Bill and John
Метод format() может иметь опциональные спецификации формата. Они отделяются от имени поля двоеточием. Например, можно выровнять строку влево <, вправо > или по центру ^ в заданном пространстве.
Также можно форматировать целые как двоичные, шестнадцатеричные и т.д., а float — округлять или показывать в экспоненциальном формате. Существует множество вариантов форматирования. См. все варианты форматирования строк с format().
>>> # форматирование целых
>>> "Binary representation of {0} is {0:b}".format(12)
'Binary representation of 12 is 1100'
>>> # форматирование float
>>> "Exponent representation: {0:e}".format(1566.345)
'Exponent representation: 1.566345e+03'
>>> # округление
>>> "One third is: {0:.3f}".format(1/3)
'One third is: 0.333'
>>> # выравнивание строк
>>> "|{:<10}|{:^10}|{:>10}|".format('butter','bread','ham')
'|butter | bread | ham|'
Старый стиль форматирования
Можно форматировать строки как в старом стиле sprintf() языка C. Используется оператор %.
>>> x = 12.3456789
>>> print('The value of x is %3.2f' % x)
The value of x is 12.35
>>> print('The value of x is %3.4f' % x)
The value of x is 12.3457
Часто используемые методы строк в Python
У строкового объекта множество методов. Метод format(), упомянутый выше — один из них. Часто используемые: lower(), upper(), join(), split(), find(), replace() и др. Полный список всех встроенных методов работы со строками в Python.
>>> "PrOgRaMiZ".lower()
'programiz'
>>> "PrOgRaMiZ".upper()
'PROGRAMIZ'
>>> "This will split all words into a list".split()
['This', 'will', 'split', 'all', 'words', 'into', 'a', 'list']
>>> ' '.join(['This', 'will', 'join', 'all', 'words', 'into', 'a', 'string'])
'This will join all words into a string'
>>> 'Happy New Year'.find('ew')
7
>>> 'Happy New Year'.replace('Happy','Brilliant')
'Brilliant New Year'
Python
- Строки в C#: основы, операции и продвинутые техники
- Словари в Python: создание, манипуляции и продвинутые техники
- Освоение строк в Java: создание, методы и лучшие практики
- Строковые представления в Java Enums: настройка toString() и лучшие практики
- Освоение строковых операций в Python: replace, join, split, reverse, преобразование регистра
- Мастерство метода strip() в Python: подробное руководство и практические примеры
- Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
- Мастерство строк форматирования format() в Python: понятные примеры
- Python len(): практическое руководство по измерению длины объектов
- Мастерство метода String.find() в Python: синтаксис, примеры и альтернативы