6.4.6. Изменение строк и операции со спискамиТак как строки являются неизменяемыми объектами, вы не можете манипулировать с ними напрямую по аналогии с тем, как вы манипулируете со списками. И хотя операции, создающие новые строки (оставляющие исходные строки без измене-ния), полезны во многих ситуациях, иногда бывает удобно работать со строкой так, словно она представляет собой список символов. В таких ситуациях следует преобразовать строку в список символов, выполнить нужные операции, а затем преобразовать полученный список обратно в строку: >>> text = "Hello, World"
>>> wordList = list(text)
>>> wordList[6:] = []
Удаляет все после запятой
> >> wordList.reverse()
>>> text = "".join(wordList)
>>> print(text)
Объединение без пробелов
,olleH
Также можно преобразовать строку в кортеж символов встроенной функцией tuple . Для преобразования строки обратно в список используется функция "".join() .
Не увлекайтесь этим методом, потому что он требует создания и уничтожения но-вых объектов строк, что обходится относительно дорого. Обработка сотен и тысяч строк не повлияет на вашу программу, но с обработкой миллионов строк ситуация может измениться.
БЫСТРАЯ.ПРОВЕРКА:.ИЗМЕНЕНИЕ.СТРОК
Как быстро заменить все знаки препинания в строке пробелами?
6.4.7. Полезные методы и константы
У объектов строк также есть несколько полезных методов для получения разных характеристик строк — например, содержит ли строка только цифры или алфавит-ные символы либо только символы верхнего или нижнего регистра: >>> x = "123"
>>> x.isdigit()
True
>>> x.isalpha()
False
>>> x = "M"
>>> x.islower()
False
>>> x.isupper()
True
За списком всех возможных методов string обращайтесь к соответствующему раз-делу официальной документации Python.
Наконец, модуль string определяет ряд полезных констант. Вы уже видели кон-станту string.whitespace — строку, которая состоит из всех символов, которые Python относит к категории пропусков в вашей системе. Константа string.digits содержит строку '0123456789' . Константа string.hexdigits включает все символы string.digits , а также 'abcdefABCDEF' — дополнительные символы, используемые в шестнадцатеричных числах. Константа string.octdigits содержит '01234567' — цифры, допустимые в восьмеричных числах. Константа string.ascii_lowercase со-держит все алфавитные символы ASCII нижнего регистра; string. ascii_uppercase содержит все алфавитные символы ASCII верхнего регистра; string. ascii_letters содержит все символы string. ascii_lowercase и string. ascii_uppercase . Воз-можно, вам захочется присвоить новое значение этим константам, чтобы изменить поведение языка. Python разрешит выполнить это действие, но скорее всего, добром это не кончится.
Помните, что строки являются последовательностями символов. Это позволяет использовать удобный оператор in языка Python для проверки принадлежности символа к любой из этих строк, хотя обычно существующие методы строк проще и удобнее. Самые распространенные операции со строками перечислены в табл. 6.2.
Таблица 6.2. Распространенные операции со строками
Помните, что эти методы не изменяют саму строку; они возвращают либо позицию в строке, либо новую строку.
ПОПРОБУЙТЕ.САМИ:.ОПЕРАЦИИ.СО.СТРОКАМИ Допустим, имеется список строк, в котором некоторые (но не обязательно все) строки начинаются и завершаются символом двойной кавычки: x = ['"abc"', 'def', '"ghi"', '"klm"', 'nop']
Какой код вы бы использовали для удаления только двойных кавычек из каж-дого элемента?
Какой код вы бы использовали для нахождения позиции последней буквы p в слове Mississippi ? А после того, как эта позиция будет найдена, какой код вы бы использовали для удаления только этой буквы?
6.5. Преобразование объектов в строкиВ языке Python почти любой тип можно преобразовать в строковое представление вызовом встроенной функции repr . Списки — единственный сложный тип данных Python, который вам встречался ранее, поэтому мы преобразуем несколько списков в их строковые представления:
>>> repr([1, 2, 3])
'[1, 2, 3]'
>>> x = [1]
>>> x.append(2)
>>> x.append([3, 4])
>>> 'the list x is ' + repr(x)
'the list x is [1, 2, [3, 4]]'
Этот пример использует функцию repr для преобразования списка x в строковое представление, которое затем объединяется с другой строкой для формирования итоговой строки. Без repr этот код работать не будет. Что именно суммируется в выражении вида "string" + [1, 2] + 3 — строки, списки или числа? Python не знает ваших намерений в такой ситуации, поэтому он выбирает безопасный вариант (выдает ошибку) вместо того, чтобы делать предположения. В предыдущем при-мере все элементы необходимо преобразовать в строковые представления, чтобы сработала конкатенация строк.
Читать дальше