Шаг 39.
Основы языка Python.
Строки и двоичные данные. Операции над строками

    На этом шаге мы рассмотрим основные операции над строками.

    Как вы уже знаете, строки относятся к последовательностям. Как и все последовательности, строки поддерживают обращение к элементу по индексу, получение среза, конкатенацию, повторение и проверку на вхождение. Рассмотрим эти операции подробно.

    К любому символу строки можно обратиться как к элементу списка - достаточно указать его индекс в квадратных скобках. Нумерация начинается с нуля:

>>> s = 'Python'
>>> s[0], s[1], s[2], s[3], s[4], s[5]
('P', 'y', 't', 'h', 'o', 'n')

    Если символ, соответствующий указанному индексу, отсутствует в строке, то возбуждается исключение IndexError:

>>> s = 'Python'
>>> s[10]
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    s[10]
IndexError: string index out of range

    В качестве индекса можно указать отрицательное значение. В этом случае смещение будет отсчитываться от конца строки, а точнее - чтобы получить положительный индекс, значение вычитается из длины строки:

>>> s[-1], s[len(s) - 1]
('n', 'n')

    Так как строки относятся к неизменяемым типам данных, то изменить символ по индексу нельзя:

>>> s = 'Python'
>>> s[0] = 'J'
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    s[0] = 'J'
TypeError: 'str' object does not support item assignment

    Чтобы выполнить изменение, можно воспользоваться операцией извлечения среза, которая возвращает указанный фрагмент строки. Формат операции:

  [<Начало>:<Конец>:<Шаг>]

    Все параметры здесь не являются обязательными. Если параметр <Начало> не указан, то используется значение 0. Если параметр <Конец> не указан, то возвращается фрагмент до конца строки. Следует также заметить, что символ с индексом, указанным в этом параметре, не входит в возвращаемый фрагмент. Если параметр <Шаг> не указан, то используется значение 1. В качестве значения параметров можно указать отрицательные значения.

    Теперь рассмотрим несколько примеров. Сначала получим копию строки:

>>> s[:] # Фрагмент от позиции 0 до конца строки
'Python'

    Теперь выведем символы в обратном порядке:

>>> s[::-1] # Отрицательное значение третьего параметра
'nohtyP'

    Получим новую строку с другим первым символом:

>>> "J" + s[1:]  # Извлекаем франмент от символа 1 до конца строки
'Jython'

    Получим новую строку без последнего символа:

>>> s[:-1] # Возвращаем фрагмент от 0 до len(s) - 2
'Pytho'

    Напечатаем первый символ в строке:

>>> s[0:1] # Символ с индексом 1 не входит в диапазон
'P'

    А теперь получим последний символ:

>>> s[-1:] # Получаем фрагмент len(s) - 1 до конца строки
'n'

    И, наконец, выведем символы с индексами 2, 3 и 4:

>>> s[2:5]  # Возвращаются с символы с индексами 2, 3 и 4
'tho'

    Узнать количество символов в строке позволяет функция len():

>>> len("Python"), len("\r\n\t"), len(r"\r\n\t")
(6, 3, 6)

    Теперь, когда мы знаем количество символов, можно перебрать все символы с помощью цикла for:

>>> s = "Python"
>>> for i in range(len(s)): print(s[i], end=" ")

P y t h o n

    Так как строки поддерживают итерации, мы можем просто указать строку в качестве параметра цикла. Результат выполнения будет таким же:

>>> s = "Python"
>>> for i in s: print(i, end=" ")

P y t h o n

    Соединить две строки в одну строку позволяет оператор +:

>>> print("Строка1" + "Строка2")
Строка1Строка2

    Кроме того, можно выполнить неявную конкатенацию строк. В этом случае две строки указываются рядом без оператора между ними:

>>> print("Строка1" "Строка2")
Строка1Строка2

    Обратите внимание на то, что если между строками указать запятую, то мы получим кортеж, а не строку:

>>> s = "Строка1", "Строка2"
>>> type(s) # Получили кортеж, а не строку
<class 'tuple'>

    Если соединяются, например, переменная и строка, то следует обязательно указывать символ конкатенации строк, иначе будет выведено сообщение об ошибке:

>>> s = "Строка1"
>>> print(s + "Строка2") # Нормально
Строка1Строка2
>>> print(s "Строка2") # Ошибка
SyntaxError: invalid syntax

    При необходимости соединить строку с другим типом данных (например, с числом) следует произвести явное преобразование типов с помощью функции str ():

>>> "string" + str(10)
'string10'

    Кроме рассмотренных операций, строки поддерживают операцию повторения, проверку на вхождение и невхождение. Повторить строку указанное количество раз можно с помощью оператора *, выполнить проверку на вхождение фрагмента в строку позволяет оператор in, а проверить на не вхождение - оператор not in:

>>> '-' * 20
'--------------------'
>>> 'yt' in 'Python' # Найдено
True
>>> 'yt' in 'Perl' # Не найдено
False
>>> 'PHP' not in 'Python' # Не найдено
True

    На следующем шаге мы рассмотрим форматирование строк.




Предыдущий шаг Содержание Следующий шаг