4.3. Функции range() и xrange()
Если Вам необходимо перебирать последовательность чисел, то пригодится встроенная функция range(). Она создает список, содержащий арифметическую прогрессию:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Указанная верхняя граница никогда не входит в созданную последовательность. range(10) создает список из 10 значений, точно соответствующих допустимым индексам для элементов последовательности, имеющей длину 10. Можно указать другую нижнюю границу или другое приращение (шаг), в том числе и отрицательное:
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0, 10, 3)
[0, 3, 6, 9]
>>> range(-10, -100, -30)
[-10, -40, -70]
Для того, чтобы перебрать индексы последовательности, используйте совместно range() и len():
>>> a = ['У', 'Матери', 'есть', 'маленькая', 'овечка']
>>> for i in range(len(a)):
... print i, a[i]
...
0 У
1 Матери
2 есть
3 маленькая
4 овечка
Дотошный читатель может заметить, что если нужно перебирать числа большого диапазона, создание списка будет неоправданно, а в некоторых случаях просто не хватит памяти:
>>> l=range(1000000000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
Действительно, если мы не собираемся изменять список, достаточно создать псевдосписок — объект, для которого мы можем получить значения "элементов", но не можем изменить их или порядок их следования. Для этих целей в языке Python предусмотрена функция xrange():
>>> xrange(5, 10)
xrange(5, 10)
>>> xrange(0, 10, 3)
xrange(0, 12, 3)
>>> xrange(-10, -100, -30)
xrange(-10, -100, -30)
>>> a = ['У', 'Матери', 'есть', 'маленькая', 'овечка']
>>> for i in xrange(len(a)):
... print i, a[i]
...
0 У
1 Матери
2 есть
3 маленькая
4 овечка
Примечания:
- (в том числе и инструкция for) требует возможности получить произвольный элемент по индексу.