Пожалуйста, смотрите https://docs.python.org/2/library/functions.html#range, чтобы увидеть, как работает диапазон. Я вижу, что это может быть изначально запутывать, чтобы прочитать документацию, но надеюсь, что мое объяснение ниже, для вашего случая, помогает.
В частности, эти строки из вышеуказанного документа отвечают на ваш вопрос: 'Полная форма возвращает список простых целых чисел [start, start + step, start + 2 * step, ...]
. Если шаг положительный, последний элемент является самым большим start + i * step
менее stop; если шаг отрицательный, последний элемент является наименьшим start + i * step
больше остановки '
В вашем случае start=2
(LEN (данные) -1) , stop =-l and step=-1
. Таким образом, потенциальный список целых чисел будет [2, 2-1, 2-2*1, 2-3*1 ...]
, который равен [2,1,0,-1 ...]
. Однако, поскольку ваш шаг отрицательный, т. Е. -1, последний элемент будет наименьшим (start + i*step
) больше stop. В списке потенциальных возможностей наименьший элемент больше, чем стоп, т. Е. Больше -1, равен 0. Таким образом, range(len(data)-1, -1, -1)
возвращает [2,1,0]
проверить вывод 'range (len (data) -1, -1, -1)' перед принятием что-нибудь о точке остановки (особенно, поскольку доказательства указывают на ваше предположение) – njzk2
'range' фактически останавливается перед верхним пределом. Предположительно, он ведет себя таким образом, чтобы гарантировать, что 'for i в диапазоне (3)' будет повторяться в 3 раза, как и ожидалось большинству людей, причем 'i' принимает значения' [0, 1, 2] '. В вашем случае 'range (2, -1, -1)' выводит '[2, 1, 0]', что соответствует индексам вывода, который вы видите. –