Если вам нужно перебрать последовательность чисел, встроенная функция range() придёт на помощь. Она генерирует арифметические прогрессии:
>>> for i in range(5): ... print(i) ... 0 1 2 3 4 Указанный конец интервала никогда не включается в сгенерированный список; вызов range(10) генерирует десять значений, которые являются подходящими индексами для элементов последовательности длины 10. Можно указать другое начало интервала и другую, даже отрицательную, величину шага.
range(5, 10) от 5 до 9
range(0, 10, 3) 0, 3, 6, 9
range(-10, -100, -30) -10, -40, -70 Чтобы пройти по всем индексам какой-либо последовательности, скомбинируйте вызовы range() и len() следующим образом:
>>> a = ['Mary', 'had', 'a', 'little', 'lamb'] >>> for i in range(len(a)): ... print(i, a[i]) ... 0 Mary 1 had 2 a 3 little 4 lamb В большинстве таких случаев удобно использовать функцию enumerate(), обратитесь к Организация циклов. Странные вещи начинают происходить при попытке вывода последовательности:
>>> print(range(10)) range(0, 10) Во многих случаях объект, возвращаемый функцией range(), ведёт себя как список, но фактически им не является. Этот объект возвращает по очереди элементы желаемой последовательности, когда вы проходите по нему в цикле, но на самом деле не создаёт списка, сохраняя таким образом пространство в памяти.
Мы называем такие объекты итерируемыми (iterable), и это все объекты, которые предназначаются для функций и конструкций, ожидающих от них поочерёдного предоставления элементов до тех пор, пока источник не иссякнет. Мы видели, что оператор for является таким итератором iterator. Функция list() тоже из их числа - она создаёт списки из итерируемых объектов:
>>> list(range(5)) [0, 1, 2, 3, 4] Позже мы познакомимся и с другими функциями, которые возвращают и принимают итерируемые объекты в качестве параметров.
Назад Вперед
8 8 8
| |