Как генерировать числа с помощью range()

Раздел: Основы Python -> Циклы

Функция range() в Python: синтаксис и базовые варианты

Основное назначение и синтаксис

Функция range() создает неизменяемую последовательность целых чисел. Она широко применяется в циклах for для повторения действий заданное количество раз. Существует три формы вызова:

range(stop)
range(start, stop)
range(start, stop, step)

значение range в python (значение range() в python)

Первый вариант генерирует числа от 0 до stop-1. Второй от start до stop-1. Третий дополнительно указывает шаг step (по умолчанию 1). Пример:

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

значение while в python (значение while в python)

0 1 2 3 4

цикл с параметром в python (цикл с параметром в python)

Если требуется начать с произвольного числа, используется вторая форма:

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

цикл while python пример (пример цикла while в python)

2 3 4 5

алгоритм while python (цикл while в python)

Для изменения шага (например, только четные числа):

for i in range(0, 10, 2):
    print(i, end=' ')

Python бесконечный (бесконечный цикл while в python)

0 2 4 6 8

какие циклы существуют в python (какие циклы существуют в python?)

Типичные ошибки:

  • Если step=0, возникает ValueError.
  • При положительном шаге и start > stop диапазон будет пустым.
  • При отрицательном шаге и start < stop диапазон также пуст.
  • Диапазон не включает значение stop. Это часто вызывает путаницу.

Решение: всегда проверять логику направления и помнить об исключении правой границы.

Как создать последовательность от 0 до N-1?

Используется форма range(N). Это самый распространенный способ для организации цикла с известным количеством повторений.

for i in range(3):
    print(f"Шаг {i}")

команда break в python (оператор break в python)

Шаг 0
Шаг 1
Шаг 2

программирование циклических алгоритмов python (циклические алгоритмы в python)

Проблема:

Новички часто ожидают, что range(3) даст числа 1,2,3. На самом деле счет начинается с нуля. Решение: использовать range(1, 4) для чисел от 1 до 3.

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

Форма range(start, stop) позволяет указать любые целые start и stop.

for i in range(5, 10):
    print(i, end=' ')
5 6 7 8 9

Проблема:

Если start > stop, цикл не выполнится ни разу. Например, range(10, 5) дает пустую последовательность. Решение: использовать отрицательный шаг, если нужен обратный порядок.

Как изменить шаг перебора?

Форма range(start, stop, step) дает полный контроль. Шаг может быть как положительным, так и отрицательным.

# Отрицательный шаг
for i in range(10, 0, -2):
    print(i, end=' ')
10 8 6 4 2

Проблема:

При step=0 Python выбрасывает ValueError: range() arg 3 must not be zero. Проверяйте шаг перед использованием.

Как преобразовать range в список?

Чтобы получить все числа диапазона сразу, используется list(range(...)).

numbers = list(range(0, 101, 10))
print(numbers)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

Проблема:

Для очень больших диапазонов (например, range(10**7)) создание списка потребляет много памяти. В таких случаях лучше использовать range напрямую в цикле, так как он вычисляет элементы лениво.

Как пройти по списку с доступом к индексу?

Можно использовать range(len(list)) для получения индексов.

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

Проблема:

Такой способ считается непитоничным. Лучше использовать enumerate(), который возвращает пары (индекс, значение). Однако range(len(...)) может быть полезен, если нужно модифицировать список по индексу.

Расширенные примеры использования range()

Пример 1. Range в генераторе списка (list comprehension)

Пример
squares = [x**2 for x in range(10)]
print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Такой подход компактно создает новый список на основе диапазона.

Пример 2. Комбинирование нескольких диапазонов через zip

Пример
for a, b in zip(range(1, 6), range(10, 15)):
    print(f'{a} + {b} = {a+b}')
1 + 10 = 11
2 + 11 = 13
3 + 12 = 15
4 + 13 = 17
5 + 14 = 19

Позволяет параллельно перебирать два диапазона разных длин (остановка на кратчайшем).

Пример 3. Обратный проход с нестандартным шагом

Пример
for i in range(20, 5, -3):
    print(i, end=' ')
20 17 14 11 8

Обратите внимание: значение 5 не входит, так как шаг отрицательный и stop не включается.

Пример 4. Вложенные диапазоны для обхода матрицы

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

Удобно для работы с двумерными списками.

Пример 5. Range с дробным шагом (альтернатива)

Встроенный range() не поддерживает числа с плавающей точкой. Для дробных шагов используют numpy.arange или генератор:

Пример
def frange(start, stop, step):
    while start < stop:
        yield round(start, 10)
        start += step

list(frange(0, 1, 0.1))
[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

Пример 6. Фильтрация значений в диапазоне

Пример
multiples_of_7 = [x for x in range(100) if x % 7 == 0]
print(multiples_of_7[:10], '... всего', len(multiples_of_7))
[0, 7, 14, 21, 28, 35, 42, 49, 56, 63] ... всего 15

Это удобно для выборки элементов, удовлетворяющих условию.

Пример 7. Использование range() в pandas (для иллюстрации)

Хотя range() не специфичен для pandas, его часто применяют для создания индексов или последовательных меток:

Пример
import pandas as pd
df = pd.DataFrame({'A': range(5), 'B': range(10, 15)})
print(df)
   A   B
0  0  10
1  1  11
2  2  12
3  3  13
4  4  14

Пример 8. Range с itertools.islice для частичной выборки

Пример
from itertools import islice
big_range = range(10**6)
small_part = list(islice(big_range, 5, 10))
print(small_part)
[5, 6, 7, 8, 9]

Позволяет работать с большими диапазонами без создания всего списка.

Значение range() в Python - comments

En
значение range в python (python)