Перейти к содержанию

2.4. Строки, расширенная работа

Нас не изменишь!

Строки - неизменяемые. Это означает, что после создания строки её больше нельзя изменять. На первый взгляд это может показаться недостатком, но на самом деле это не так. Просто при изменении строки создаётся её копия. Об этом надо помнить.

Форматнуть, что-ли?

Иногда бывает нужно составить строку на основе каких-либо данных. Вот здесь-то и пригождается метод format().
Возьмём пример:

age = 26
name = 'Swaroop'
print('Возраст {0} -- {1} лет.'.format(name, age))
print('Почему {0} забавляется с этим Python?'.format(name))

Вывод:
Возраст Swaroop -- 26 лет.
Почему Swaroop забавляется с этим Python?

В строку могут быть включены определённые обозначения, а впоследствии может быть вызван метод format для замещения этих обозначений соответствующими аргументами. Взгляните на первый случай применения обозначений, где мы пишем {0}, и это соответствует переменной name, являющейся первым аргументом метода format. Аналогично, второе обозначение {1} соответствует переменной age, являющейся вторым аргументом метода format. Заметьте, что Python начинает отсчёт с 0, поэтому первая позиция – номер 0, вторая – номер 1 и т.д.
Заметьте, мы ведь могли добиться того же самого результата и объединением строк: 'Возраст' + name + ' -- ' + str(age) + ' лет.', однако вы сами видите, как это некрасиво, и как легко в таком случае допустить ошибку. Во-вторых, преобразование в строку делается методом format автоматически, в отличие от явного преобразования в нашем примере. В-третьих, используя метод format, мы можем изменить сообщение, не затрагивая используемых переменных, и наоборот. На всякий случай имейте в виду, что цифры здесь не обязательны. Можно было бы просто написать:
age = 26
name = 'Swaroop'
print('Возраст {} -- {} лет.'.format(name, age))
print('Почему {} забавляется с этим Python?'.format(name))

и получить такой же результат, как и ранее.

Разрежем хлебушек

Да, не хлебушек, но строки. Погодите-ка. Ведь строки так похожи на списки! Как только Вы создали строку, Вы можете получить любую её часть как новую строку. Это называется разрезание строк. Разрезание работает также как срезы для списков, что вполне логично, так как строки это те же последовательности символов.

a_string = 'My alphabet starts where your alphabet ends.'
print(a_string[3:11])
print(a_string[3:-3])

Полезные мелочи

Что же ещё можно о строках узнать? Что ж, вы знали, например, что строки также являются объектами и имеют методы, при помощи которых можно делать практически всё: от проверки части строки до удаления краевых пробелов?
Все строки, используемые вами в программах, являются объектами класса str. Некоторые полезные методы этого класса продемонстрированы на примере ниже. Чтобы посмотреть весь список методов, выполните help(str).
Примеры методов:

name = 'Swaroop' # Это объект строки
if name.startswith('Swa'):
    print('Да, строка начинается на "Swa"')
if 'a' in name:
    print('Да, она содержит строку "a"')
if name.find('war') != -1:
    print('Да, она содержит строку "war"')
delimiter = '_*_'
mylist = ['Бразилия', 'Россия', 'Индия', 'Китай']
print(delimiter.join(mylist))

Вывод:
Да, строка начинается на "Swa"
Да, она содержит строку "a"
Да, она содержит строку "war"
Бразилия_*_Россия_*_Индия_*_Китай

Здесь мы видим сразу несколько методов строк в действии. Метод startswith служит для того, чтобы определять, начинается ли строка с некоторой заданной подстроки. Оператор in используется для проверки, является ли некоторая строка частью данной строки. Метод find используется для определения позиции данной подстроки в строке; find возвращает -1, если подстрока не обнаружена. В классе str также имеется отличный метод для объединения (join) элементов последовательности с указанной строкой в качестве разделителя между элементами, возвращающий большую строку, сгенерированную таким образом.

Краткое содержание

- Строки - неизменяемые
- Для форматирования вывода используйте метод format
- Для получения части строки используйте срезы.
- Поиск подстроки в начале - метод startswith
- Поиск подстроки - метод find
- Объединение строк - метод join

Самостоятельная работа

Изучите дополнительные методы строк на сайте pythonworld.
Прочитайте материал про кодировку строк в dive into Python

Задачи