Что делает синтаксис расширенного среза для отрицательных шагов?

Синтаксис расширенного среза в python был объяснен мне как « a[n:m:k] returns every kth element from n to m ".

Это дает мне хорошую идею, что ожидать, когда k положительно. Но я теряюсь в том, как интерпретировать a[n:m:k] для отрицательного k. Я знаю, что a[::-1] меняет направление a и что a[::-k] принимает a[::-k] й элемент обратного a.

Но как это обобщение определения для k положительно? Я хотел бы знать, как фактически определяется a[n:m:k] , так что (например) я могу понять, почему:

 "abcd"[-1:0:-1] = "dcb" 

Является a[n:m:-k] изменением последовательности a, затем беря элементы с исходными индексами, начиная с n и заканчивая один до m или что-то еще? Я так не думаю, потому что этот шаблон не соответствует другим значениям n и m, которые я пробовал. Но я затрудняюсь понять, как это на самом деле определено, и поиск ни к чему не привел.

2 Solutions collect form web for “Что делает синтаксис расширенного среза для отрицательных шагов?”

[-1:0:-1] означает: начинать с индекса len(string)-1 и перемещаться вверх до 0 (не входит в комплект) и делать шаг -1 (обратный).

Таким образом, выводятся следующие индексы:

 le-1, le-1-1, le-1-1-1 .... 1 # le is len(string) 

пример:

 In [24]: strs = 'foobar' In [25]: le = len(strs) In [26]: strs[-1:0:-1] # the first -1 is equivalent to len(strs)-1 Out[26]: 'raboo' In [27]: strs[le-1:0:-1] Out[27]: 'raboo' 

Документация Python ( здесь техническая , объяснение для range() немного легче понять) более корректно, чем упрощенное объяснение «каждый k-й элемент». Параметры резки точно названы

 slice[start:stop:step] 

поэтому срез начинается с местоположения, определенного start , останавливается до достижения stop местоположения и перемещается из одной позиции в следующую step элементы.

  • Почему .loc ведет себя по-разному в зависимости от того, печатаются или назначены значения?
  • Ошибка списка Python: шаг на срез
  • Улучшение чистого первичного сита Python по формуле повторения
  • Нарезка словаря ключами, начинающимися с определенной строки
  • Python: одиночная двоеточие против двойной кишки
  • Назначить значение нескольким срезам в numpy
  • Python: реализация среза в __getitem__
  • Перемещение неперекрывающегося окна в Numpy
  • В Python, как мне удалить элемент списка Nth из списка списков (удаление столбцов)?
  • Столбец со списком строк в python
  • Использование срезов в Python
  • Python - лучший язык программирования в мире.