В дополнение к индексации, строки поддерживают срезы. Индексирование используется для получения отдельных символов, взятие среза позволяет получить подстроку:
# символы от позиции 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'