2014-10-01 2 views
1

Я пытаюсь понять, генераторы и пришли через следующий код:Генераторы в Python Query

def reverse(data): 
    for index in range(len(data)-1, -1, -1): 
     yield data[index] 


for s in reverse([1,2,3]): 
    print s 

Я понимаю, что мы начинаем с индексом 2, декремента по 1 и заканчиваются в -1. Я не понимаю, что остановка -1, я думал, должна относиться к "3", но, похоже, она относится к "1"? :

3 
2 
1 

Благодаря

+1

проверить вывод 'range (len (data) -1, -1, -1)' перед принятием что-нибудь о точке остановки (особенно, поскольку доказательства указывают на ваше предположение) – njzk2

+1

'range' фактически останавливается перед верхним пределом. Предположительно, он ведет себя таким образом, чтобы гарантировать, что 'for i в диапазоне (3)' будет повторяться в 3 раза, как и ожидалось большинству людей, причем 'i' принимает значения' [0, 1, 2] '. В вашем случае 'range (2, -1, -1)' выводит '[2, 1, 0]', что соответствует индексам вывода, который вы видите. –

ответ

1

Пожалуйста, смотрите 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]

Смежные вопросы