В Python range(num)
( более или менее ) возвращает список чисел от 0 до num - 1
. Следовательно, range(len(my_list))
сгенерирует список чисел от 0 до длины my_list
минус один. Это часто полезно, потому что сгенерированные числа являются индексами каждого элемента в my_list
(списки Python начинают считать с 0). Например, range(len(["a", "b", "c"]))
- это [0, 1, 2]
, индексы, необходимые для доступа к каждому элементу в исходном списке. ["a", "b", "c"][0]
- это "a"
и т. Д.
В Python цикл for x in mylist
перебирает каждый элемент в mylist
, устанавливая x
значение каждого элемента в порядке. Одним из распространенных шаблонов для Python для циклов является for x in range(len(my_list))
. Это полезно, потому что вы перебираете индексы каждого элемента списка вместо самих значений. Получить доступ к значениям почти так же легко (просто используйте my_list[x]
), но гораздо проще сделать такие вещи, как доступ к предыдущему значению (просто используйте my_list[x-1]
, гораздо проще, чем если бы у вас не было индекса!) . [тысяча сто двадцать восемь]
В вашем примере idx
отслеживает индекс каждого элемента списка, поскольку программа выполняет итерацию по search_list
. Чтобы извлечь значения из search_list
, программа использует search_list[idx]
, так же, как я использовал my_list[x]
в моем примере. Затем код присваивает maximum_score_index
самому индексу номер, например, 0
, 1
или 2
, а не значение. С помощью search_list[maximum_score_index]
все еще легко узнать, какова максимальная оценка. Причина, по которой idx
не используется в качестве средства доступа к списку во втором случае, заключается в том, что программа хранит сам индекс, а не значение массива по этому индексу.
Это присутствовало с начала. Чтобы видеть что, получите источник от alt.sources, конкретно сообщение, названное "часть 17/21 Python 0.9.1". Дата 21 февраля 1991. Это сообщение включало определение грамматики, которое указывает:
for_stmt: 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite]
Вы смогли находить 0.9.0 источников, если бы Вы пробуете тяжелее, чем я, но поскольку первый общедоступный выпуск был 0.9.0 20 февраля, который вернул бы Вас однажды. Эти 0.9.1 выпусков были незначительным патчем, который не влиял на эту часть грамматики.
(Который является ссылкой UTSL или что? Когда был прошлый раз, Вы посмотрели на shar файл?;)
BTW, я восстановил первоисточник и настроил его немного для компиляции под gcc-4.0 на моем поле OS X 10.4. Детали для заинтересованных немногие, включая python-0.9.1.tar.gz.
Вся история разработки доступна от управления версиями, даже после изменения систем управления версиями дважды. "hg регистрируются,-p-r 6:7" из cpython Подвижного архива показывает, что "для/еще" фиксировался на Sun 14 октября 12:07:46 1990 +0000, и предыдущая фиксация была суббота 13 октября 19:23:40 1990 +0000. для/еще была часть Python с октября 1990.
Начиная с версии 1.0.1, по крайней мере..
Python 1.0.1 (Mar 27 2009)
Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam
>>> for x in range(2):
... print x
... else:
... print "loop done"
...
0
1
loop done
Это было вокруг по крайней мере начиная с 1,4, который является самой старой версией документации, о которой я знаю.