Сообщить об ошибке.

Использование срезов строк в Python

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

# символы от позиции 0 (включен) до позиции 2 (исключен)
>>> word[0:2]
# 'Py'

# символы от позиции 2 (включен) до позиции 5 (исключен)
>>> word[2:5]
# 'tho'

Обратите внимание, что начало среза всегда включено, а конец среза всегда исключен. Это гарантирует, что str[:i] + str[i:] всегда равно str:

>>> word[:2] + word[2:]
# 'Python'
>>> word[:4] + word[4:]
# 'Python'

Индексы срезов имеют полезные значения по умолчанию. Пропущенный первый индекс по умолчанию равен нулю, пропущенный второй индекс по умолчанию равен размеру/длине разрезаемой строки.

# символы от начала до позиции 2, который исключен
>>> word[:2]
# 'Py'

# символы от позиции 4 - включен, до конца строки
>>> word[4:]
# 'on'

# символы от предпоследнего (включенного) до конца
>>> word[-2:]
# 'on'

Один из способов запомнить, как работают срезы, состоит в том, чтобы думать об индексах как указатели на промежутки между символами, с левым краем, равным 0. Тогда правый край последнего символа строки из n символов имеет индекс n, например:

+---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

Первая строка чисел дает положение индексов 0… 6, второй ряд дает соответствующие отрицательные показатели. Срез от i до j состоит из всех символов между ребрами, обозначенными i и j соответственно.

Для неотрицательных индексов длина среза является разностью индексов, если оба находятся в пределах границ. Например, длина word[1:3] составляет 2.

Попытка использовать индекс, который больше длины строки приведет к ошибке:

# в слове всего 6 символов
>>> word[42]
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# IndexError: string index out of range

Однако индексы срезов вне диапазона обрабатываются изящно и не дают ошибок:

>>> word[4:42]
# 'on'
>>> word[42:]
# ''

Если вам нужна другая строка, вы должны создать новую:

>>> 'J' + word[1:]
# 'Jython'

>>> word[:2] + 'py'
# 'Pypy'