Сообщить об ошибке.

Числовые последовательности для цикла Python

Запуск for/in произвольное число раз в Python

Если вам нужно перебрать последовательность чисел, в этом вам поможет встроенная функция range(). Эта функция генерирует арифметические прогрессии:

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4
>>>

В примере выше, указанный аргумент range() число 5 - конечная точка, никогда не является частью сгенерированной последовательности. Например, range(10) генерирует 10 значений, для элементов последовательности длиной 10, проще для понимания от 0 до 9. В классе range() можно менять диапазон, указывая начальное значение, отличное от 0 или указать другое приращение последовательности (задать "шаг"), даже отрицательное:

range(5, 10)
   5, 6, 7, 8, 9

range(0, 10, 3)
   0, 3, 6, 9

range(-10, -100, -30)
  -10, -40, -70

Чтобы перебрать индексы последовательности, вы можете комбинировать range()]f-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().

Странная вещь происходит, если вы просто распечатаете range(10):

>>> print(range(10))
range(0, 10)
>>>

Во многих отношениях возвращаемый объект range() ведет себя так, как будто это список, но на самом деле range() не создает список. Это объект, который возвращает элементы желаемой последовательности, только тогда, когда вы выполняете итерацию, тем самым экономя оперативную память.

Мы говорим, что такой объект является итеративным, то есть пригодным для функций или конструкции, которые ожидают что-то, из чего они могут получать последовательные элементы до тех пор, пока они не закончатся. Выше мы видели, что оператор for является такой конструкцией, а примером функции принимающей итеративный объект, является sum():

>>> sum(range(4))  # 0 + 1 + 2 + 3
6
>>>

Позже мы увидим больше функций, которые возвращают итерируемые значения и принимают их как аргументы. И наконец, может быть, вам интересно, как получить список list() из диапазона range?

Вот решение:

>>> list(range(4))
[0, 1, 2, 3]
>>>

Примеры использования:

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(0))
[]
>>> list(range(1, 0))
[]