Как генерировать числа с помощью range()
Функция 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]
Позволяет работать с большими диапазонами без создания всего списка.