Потерпите меня, пока я объясню свой вопрос. Перейдите к жирному заголовку, если вы уже понимаете индексирование расширенного списка фрагментов.
В python вы можете индексировать списки с использованием нотации среза. Вот пример:
>>> A = list(range(10))
>>> A[0:5]
[0, 1, 2, 3, 4]
Вы также можете включить шаг, который действует как "шаг":
>>> A[0:5:2]
[0, 2, 4]
Штраф также может быть отрицательным, что означает, что элементы извлекаются в обратном порядке:
>>> A[5:0:-1]
[5, 4, 3, 2, 1]
Но подождите! Я хотел увидеть [4, 3, 2, 1, 0]
. О, я вижу, мне нужно уменьшить начальные и конечные индексы:
>>> A[4:-1:-1]
[]
Что случилось? Он интерпретирует -1 как находящийся в конце массива, а не в начале. Я знаю, что вы можете достичь этого следующим образом:
>>> A[4::-1]
[4, 3, 2, 1, 0]
Но вы не можете использовать это во всех случаях. Например, в методе, которому были переданы индексы.
Мой вопрос:
Есть ли какой-либо хороший питонический способ использования расширенных срезов с отрицательными шагами и явных начальных и конечных индексов, которые включают первый элемент последовательности?
Это то, к чему я придумал, но кажется неудовлетворительным.
>>> A[0:5][::-1]
[4, 3, 2, 1, 0]