Полное обозначение слайса в Python следующее:
s[start:end:step]
При этом он обеспечивает полезные значения по умолчанию для значений в соответствии с документацией :
Индексы срезов имеют полезные значения по умолчанию;пропущенный первый индекс по умолчанию равен нулю, пропущенный второй индекс по умолчанию равен размеру разрезанной строки.
Поэтому, когда вы делаете что-то вроде:
s[1:]
под капотомэто сделано:
s[1:len(s)]
Обратите внимание, что в обоих случаях step по умолчанию 1
.Например, в большинстве языков, когда вы хотите получить доступ к последнему элементу списка, вы делаете что-то вроде:
s[len(s) - 1]
Негативная индексация Python является своего рода синтаксическим сахаром в этой записи, так:
l[-1] = l[len(l) - 1]
l[-2] = l[len(l) - 2]
...
Затем, когда вы делаете:
l[-3:]
, это делается:
l[len(l)-3:len(l)]
Таким образом, вместо 0
вы должны использовать len(l)
какпоследний индекс:
l = [1, 2, 3, 4, 5]
print(l[-3:len(l)])
Выход
[3, 4, 5]
Обратите внимание, что l[-3:0]
возвращает пустой список, потому что len(l) - 3 > 0
, то есть первый индекс большевторой и шаг равен 1
.
Далее
- Понимание обозначения среза Python