Функция range()

Функция range()

В предыдущем уроке вы видели range() в паре с for, но не разбирали её детально. Пришло время: range() — одна из самых используемых встроенных функций Python, и знать её тонкости необходимо.

Что такое range()

range() создаёт объект-диапазон — последовательность целых чисел. Это не список чисел в памяти (что было бы расточительно для range(1_000_000)), а «ленивая» последовательность, которая генерирует числа по требованию.

Три формы вызова:

range(stop)              # от 0 до stop (не включая)
range(start, stop)       # от start до stop (не включая)
range(start, stop, step) # от start до stop с шагом step

range(stop)

Создаёт числа от 0 до stop - 1:

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

# Преобразование в список для наглядности:
print(list(range(5)))    # [0, 1, 2, 3, 4]
print(list(range(1)))    # [0]
print(list(range(0)))    # [] — пустой диапазон

Ноль в качестве stop даёт пустой диапазон. Отрицательный stop тоже:

print(list(range(-3)))   # [] — пустой

range(start, stop)

Создаёт числа от start до stop - 1:

print(list(range(1, 6)))    # [1, 2, 3, 4, 5]
print(list(range(3, 8)))    # [3, 4, 5, 6, 7]
print(list(range(5, 5)))    # [] — start == stop → пусто
print(list(range(10, 3)))   # [] — start > stop → пусто (при шаге 1)

Типичное использование — числа от 1 до N включительно:

n = 10
for i in range(1, n + 1):   # range(1, 11) → 1..10
    print(i)

range(start, stop, step)

Добавляет шаг — расстояние между соседними числами:

print(list(range(0, 10, 2)))     # [0, 2, 4, 6, 8] — чётные
print(list(range(1, 10, 2)))     # [1, 3, 5, 7, 9] — нечётные
print(list(range(0, 100, 10)))   # [0, 10, 20, ..., 90]

Шаг может быть отрицательным — для обратного отсчёта. При отрицательном шаге start должен быть больше stop:

print(list(range(10, 0, -1)))    # [10, 9, 8, ..., 1]
print(list(range(5, -1, -1)))    # [5, 4, 3, 2, 1, 0]
print(list(range(100, 0, -10)))  # [100, 90, ..., 10]

Типичные паттерны с range

N повторений:

for _ in range(3):
    print("tick")   # выводит 3 раза

Числа от 1 до N:

total = 0
for i in range(1, 101):   # 1..100
    total += i
print(total)   # 5050

Обратный отсчёт:

for i in range(5, 0, -1):
    print(i)   # 5 4 3 2 1
print("Пуск!")

Чётные числа:

for n in range(2, 11, 2):
    print(n)   # 2 4 6 8 10

Индексы строки или списка:

word = "Python"
for i in range(len(word)):   # 0, 1, 2, 3, 4, 5
    print(f"word[{i}] = {word[i]}")

range vs список чисел

Важное преимущество rangeэффективность памяти. Объект range(1_000_000) занимает примерно столько же памяти, сколько range(5) — несколько байт для хранения параметров. Список из миллиона чисел занимал бы мегабайты.

import sys
print(sys.getsizeof(range(1_000_000)))    # ~ 48 байт
print(sys.getsizeof(list(range(1000))))   # ~ 8856 байт

Поэтому for i in range(N) всегда предпочтительнее for i in list(range(N)).

Преобразование range в список

Иногда нужен настоящий список чисел — например, чтобы его модифицировать. Тогда явно конвертируем:

numbers = list(range(1, 6))
print(numbers)   # [1, 2, 3, 4, 5]

Проверь себя

Что выведет этот код?

for i in range(10, 0, -3):
    print(i)

Начало 10, конец 0 (не включая), шаг -3. Последовательность: 10 → 7 → 4 → 1 → -2 (стоп, < 0 уже). Вывод: 10, 7, 4, 1.

Проверьте в интерпретаторе!

Итог

  • range(stop) → числа 0, 1, ..., stop-1.
  • range(start, stop) → числа start, start+1, ..., stop-1.
  • range(start, stop, step) → числа с шагом; шаг может быть отрицательным.
  • range — «ленивая» последовательность: не хранит все числа в памяти.
  • Для конвертации в список: list(range(...)).
  • Типичные паттерны: N повторений (range(N)), числа 1..N (range(1, N+1)), обратный отсчёт (range(N, 0, -1)).

В следующем уроке изучим операторы break, continue и pass — инструменты для управления ходом цикла изнутри.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике