Python range для быстрого счёта и индексации

Встроенная функция python range создаёт неизменяемую последовательность целых чисел, заданную началом, концом и шагом. Используйте её, когда нужны надёжные счётчики или смещения индекса без создания списка всех чисел. Она показывает, как начало, конец и шаг управляют числами, которые выдаёт range. Для паттернов циклов с range см. пример цикла for в Python.

Пример Python Range Для Счёта С Шагом

Вывод:

Результат появится здесь...

Вывод:

ручка: 10 мм
степлер: 30 мм

Как Работает Этот Пример

  1. range(0, len(items), 2) идёт по индексам списка с шагом 2.
  2. Значение конца не включается, поэтому до len(items) не доходит.
  3. Каждый индекс читает элемент и печатает значение, привязанное к индексу (10, 30).

Частые ошибки с Python range

Ошибка 1: Ожидать, что конечное значение включается.

for n in range(1, 5):
    print(n)
for n in range(1, 6):
    print(n)

Почему это происходит: range останавливается до конечного значения, поэтому для включающих последовательностей нужно stop + 1.

Ошибка 2: Использовать положительный шаг при обратном счёте.

for n in range(5, 0, 1):
    print(n)
for n in range(5, 0, -1):
    print(n)

Почему это происходит: положительный шаг движется только вверх; для счёта вниз шаг должен быть отрицательным, иначе range пуст.

Ошибка 3: Передавать нецелые числа в start, stop или step.

for rate in range(0, 1, 0.1):
    print(rate)
for basis_points in range(0, 101, 5):
    rate = basis_points / 100
    print(rate)

Почему это происходит: аргументы range должны быть целыми (или реализовать __index__), и шаг не может быть нулём.

python range vs list(range): что выбрать

Используйте range, когда…Используйте list(range(...)), когда…
Нужно только итерировать или индексировать по целым числам.Нужно сохранить или изменять числа позже.
Нужна постоянная память при итерации.Вы готовы платить память O(n) за реальный список.
Нужен объект-последовательность с предсказуемой математикой start/stop/step.Нужны методы списка вроде append или sort.

Правило: используйте range для итерации и смещений; материализуйте список только когда он действительно нужен целиком в памяти. Когда нужны пары индекс + значение, выбирайте enumerate — см. пример Python enumerate.

Соображения По Производительности

range хранит только начало, конец и шаг, поэтому использует O(1) памяти даже для огромных последовательностей. Проверка принадлежности типа n in range(...) выполняется за O(1) для целых чисел, что быстрее, чем проход по списку. Если вы вызываете list(range(...)), вы платите O(n) памяти и времени за создание каждого значения, поэтому делайте это только при необходимости реального списка.

Больше паттернов для Python range

Считать повторы с отрицательным шагом.

for remaining in range(3, 0, -1):
    print(f"Повтор через {remaining}с")

Отрицательный шаг делает последовательность убывающей, а конечное значение остаётся исключённым. Это даёт короткий и предсказуемый обратный отсчёт без дополнительных условий.

Генерировать рабочие часы без хранения списка.

for hour in range(9, 18):
    print(f"{hour}:00")

range(9, 18) выдаёт 9..17, что соответствует графику 9–17 с исключённым концом. Это чистый способ получить фиксированные слоты без предварительного списка.

Когда использовать Python range

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