Срезы в python с отрицательным шагом

Не могу понять никак, откуда начинается отсчет 4, откуда 1. Если используется отрицательный шаг, и элементы среза извлекаются в обратном порядке, тогда и границы среза тоже нужно указывать в обратном порядке. Первой указывается правая граница среза, второй — левая:

value = 'Hexlet'

# Символ с индексом 1 не будет включен в подстроку
value[4:1:-1]  # 'elx'

Вроде бы всё написано, но никак не могу в голове разложить, что нужно делать, сначала отобразить Hexlet как telxeH, а потом вести отсчёт элемента среза 4 и 1, или нет? Откуда считать то по итогу? Объясните именно логику что делать по порядку. Получается на выходе 'elx' но как именно я не пойму. Спасибо.


Ответы (2 шт):

Автор решения: Amgarak

У вас есть строка value = 'Hexlet' - [0-H][1-e][2-x][3-l][4-e][5-t]. Вы хотите извлечь подстроку, начиная с индекса 4 и заканчивая индексом 1 в обратном порядке. При использовании шага -1, элементы будут извлекаться в обратном порядке.

  1. Вы начинаете с индекса 4 (правая граница среза) и берете символ с индексом ('e')
  2. Перемещаетесь влево на еще один шаг и берете символ с индексом 3 ('l').
  3. Перемещаетесь влево на еще один шаг и берете символ с индексом 2 ('x').
  4. Вы достигли левой границы среза с индексом 1 (левая граница среза) - он не включается в срез.

Полученная подстрока: 'elx'.

→ Ссылка
Автор решения: Oopss

введите сюда описание изображения

Срез[Начало:Конец:Шаг] (Конец не включается)

value = 'Hexlet'

Индексы равнозначные "H"=[0]=[-6]

print(value[-5:-2]) #exl
print(value[1:4]) #exl
print(value[1:-2]) #exl

это одно и тоже

Шаг- просто прибавляется положительный слева направо, отрицательный наоборот.

print(value[::1]) #Hexlet 0=0, 0+1=1, 1+1=2, 2+1=3 ...
print(value[::-1]) #telxeH 0+(-1)=-1, -1+(-1)=-2, -2+(-1)=-3 ...
→ Ссылка