Python range для быстрого счёта и индексации
Встроенная функция python range создаёт неизменяемую последовательность целых чисел, заданную началом, концом и шагом.
Используйте её, когда нужны надёжные счётчики или смещения индекса без создания списка всех чисел.
Она показывает, как начало, конец и шаг управляют числами, которые выдаёт range.
Для паттернов циклов с range см. пример цикла for в Python.
Пример Python Range Для Счёта С Шагом
Вывод:
Результат появится здесь...
Вывод:
ручка: 10 мм
степлер: 30 мм
Как Работает Этот Пример
range(0, len(items), 2)идёт по индексам списка с шагом 2.- Значение конца не включается, поэтому до
len(items)не доходит. - Каждый индекс читает элемент и печатает значение, привязанное к индексу (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(...)), если не нужно сохранять или менять значения позже.