Создание диапазонов и итерация по числам с помощью range

Раздел: Основы Python -> Последовательности и итерация

Основы работы с range()

Для создания последовательности целых чисел в Python используется встроенная функция range(). Она применяется в циклах, списковых включениях и любых операциях, требующих перебора числовых значений. Основная форма вызова: range(stop) - генерирует числа от 0 до stop-1. Например:

for i in range(5):
    print(i, end=' ')

Python диапазон значений (диапазон значений в python)

0 1 2 3 4

Функция range() не создаёт список в памяти, а возвращает итератор, что позволяет работать с большими диапазонами без затрат оперативной памяти.

Как создать последовательность от a до b с шагом?

Используйте полный синтаксис range(start, stop, step). Например, чётные числа от 2 до 10:

for i in range(2, 11, 2):
    print(i, end=' ')
2 4 6 8 10

Ошибка: если step равен нулю, возникает ValueError. Если start >= stop и step положителен, или start <= stop и step отрицателен, диапазон будет пустым - цикл не выполнится ни разу. Проверяйте знак шага и границы.

Как получить список чисел из диапазона?

Преобразуйте range() в список с помощью list():

numbers = list(range(1, 10, 3))
print(numbers)
[1, 4, 7]

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

Как перебрать числа в обратном порядке?

Примените reversed() к объекту range() или задайте отрицательный шаг:

for i in reversed(range(5)):
    print(i, end=' ')
4 3 2 1 0
for i in range(4, -1, -1):
    print(i, end=' ')
4 3 2 1 0

Ошибка: при отрицательном шаге начальное значение должно быть больше конечного, иначе цикл не выполнится. Убедитесь, что stop меньше start.

Как перебрать элементы списка по индексам?

Используйте range(len(sequence)):

fruits = ['яблоко', 'банан', 'вишня']
for idx in range(len(fruits)):
    print(f'{idx}: {fruits[idx]}')
0: яблоко
1: банан
2: вишня

Типичная ошибка: путать индексы с элементами. range(len(fruits)) даёт индексы, а не значения. Для перебора элементов лучше использовать for fruit in fruits, если не нужны индексы.

Дополнительные примеры и тонкости range()

Ниже приведены разнообразные сценарии использования range() с пояснениями.

Один аргумент

Пример
nums = list(range(7))
print(nums)
[0, 1, 2, 3, 4, 5, 6]

Создаёт последовательность от 0 до 6 включительно.

Два аргумента (начало и конец)

Пример
seq = list(range(3, 8))
print(seq)
[3, 4, 5, 6, 7]

Начинается с 3, заканчивается на 7. Конечное значение не включается.

Три аргумента с положительным шагом

Пример
even = list(range(0, 20, 4))
print(even)
[0, 4, 8, 12, 16]

Числа от 0 до 19 с шагом 4.

Отрицательный шаг для убывающей последовательности

Пример
desc = list(range(10, 0, -2))
print(desc)
[10, 8, 6, 4, 2]

Начало 10, конец 0 (не включается), шаг -2.

Пустой диапазон

Пример
empty = list(range(5, 2))
print(empty)
[]

Так как start (5) >= stop (2) и шаг положительный по умолчанию, диапазон пуст. Аналогично для отрицательного шага, если start < stop.

Использование range() в списковом включении

Пример
squares = [x**2 for x in range(1, 6)]
print(squares)
[1, 4, 9, 16, 25]

Удобный способ создания списка значений по формуле.

Комбинирование с len() для изменения элементов

Пример
values = [10, 20, 30]
for i in range(len(values)):
    values[i] *= 2
print(values)
[20, 40, 60]

Изменение списка на месте через индексы.

Большие диапазоны и проверка памяти

Пример
big_range = range(10**8)  # сто миллионов чисел
print(type(big_range))
print(big_range[100])     # доступ по индексу возможен
<class 'range'>
100

Объект range не хранит все числа, поэтому не вызывает переполнения памяти. Доступ к отдельному элементу работает за O(1).

Проверка вхождения числа в диапазон

Пример
r = range(1, 100, 2)
print(25 in r)
print(26 in r)
True
False

Оператор in проверяет, принадлежит ли число последовательности без её генерации.

Цикл с range() и break

Пример
for i in range(10):
    if i == 5:
        break
    print(i, end=' ')
print('\nВыполнен break')
0 1 2 3 4 
Выполнен break

Прерывание цикла по условию.

Вложенные циклы с range()

Пример
for x in range(2):
    for y in range(3):
        print(f'({x},{y})', end=' ')
    print()
(0,0) (0,1) (0,2) 
(1,0) (1,1) (1,2)

Генерация пар координат.

Использование range() с zip()

Пример
names = ['Аня', 'Боря', 'Вася']
avg = [4.5, 3.7, 5.0]
for idx, name, score in zip(range(1, len(names)+1), names, avg):
    print(f'{idx}. {name}: {score}')
1. Аня: 4.5
2. Боря: 3.7
3. Вася: 5.0

Объединение нескольких последовательностей с нумерацией.

Диапазон значений в Python - comments

En
Python диапазон значений (python)