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

Синтаксис расширенного среза в 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 элементы.

  • Pygame - перерисовывает пикселы определенного цвета для другого с помощью SurfArray (проблема среза массива)
  • Есть ли разница между и при копировании списка?
  • Какова точка зрения в пандах, если не определено, возвращает ли операция индексирования представление или копию?
  • Вырезание нескольких диапазонов столбцов в Panda
  • как получить последнюю часть строки перед определенным символом?
  • Использовать нотацию фрагмента с помощью collection.deque
  • Столбец со списком строк в python
  • Что делает функция slice () в Python?
  • Python - лучший язык программирования в мире.