Создание диапазонов и итерация по числам с помощью range
Основы работы с range()
Для создания последовательности целых чисел в Python используется встроенная функция range(). Она применяется в циклах, списковых включениях и любых операциях, требующих перебора числовых значений. Основная форма вызова: range(stop) - генерирует числа от 0 до stop-1. Например:
for i in range(5):
print(i, end=' ')Python диапазон значений (диапазон значений в python)
0 1 2 3 4
Функция range() не создаёт список в памяти, а возвращает итератор, что позволяет работать с большими диапазонами без затрат оперативной памяти.
Как создать последовательность от a до b с шагом?
Используйте полный синтаксис range(start, stop, step). Например, чётные числа от 2 до 10:
for i in range(2, 11, 2):
print(i, end=' ')2 4 6 8 10
Ошибка: если step равен нулю, возникает ValueError. Если start >= stop и step положителен, или start <= stop и step отрицателен, диапазон будет пустым - цикл не выполнится ни разу. Проверяйте знак шага и границы.
Как получить список чисел из диапазона?
Преобразуйте range() в список с помощью list():
numbers = list(range(1, 10, 3))
print(numbers)[1, 4, 7]
Предупреждение: при большом диапазоне список может занять много памяти. Используйте range() напрямую в циклах, если требуется только итерация.
Как перебрать числа в обратном порядке?
Примените reversed() к объекту range() или задайте отрицательный шаг:
for i in reversed(range(5)):
print(i, end=' ')4 3 2 1 0
for i in range(4, -1, -1):
print(i, end=' ')4 3 2 1 0
Ошибка: при отрицательном шаге начальное значение должно быть больше конечного, иначе цикл не выполнится. Убедитесь, что stop меньше start.
Как перебрать элементы списка по индексам?
Используйте range(len(sequence)):
fruits = ['яблоко', 'банан', 'вишня']
for idx in range(len(fruits)):
print(f'{idx}: {fruits[idx]}')0: яблоко 1: банан 2: вишня
Типичная ошибка: путать индексы с элементами. range(len(fruits)) даёт индексы, а не значения. Для перебора элементов лучше использовать for fruit in fruits, если не нужны индексы.
Дополнительные примеры и тонкости range()
Ниже приведены разнообразные сценарии использования range() с пояснениями.
Один аргумент
nums = list(range(7))
print(nums)[0, 1, 2, 3, 4, 5, 6]
Создаёт последовательность от 0 до 6 включительно.
Два аргумента (начало и конец)
seq = list(range(3, 8))
print(seq)[3, 4, 5, 6, 7]
Начинается с 3, заканчивается на 7. Конечное значение не включается.
Три аргумента с положительным шагом
even = list(range(0, 20, 4))
print(even)[0, 4, 8, 12, 16]
Числа от 0 до 19 с шагом 4.
Отрицательный шаг для убывающей последовательности
desc = list(range(10, 0, -2))
print(desc)[10, 8, 6, 4, 2]
Начало 10, конец 0 (не включается), шаг -2.
Пустой диапазон
empty = list(range(5, 2))
print(empty)[]
Так как start (5) >= stop (2) и шаг положительный по умолчанию, диапазон пуст. Аналогично для отрицательного шага, если start < stop.
Использование range() в списковом включении
squares = [x**2 for x in range(1, 6)]
print(squares)[1, 4, 9, 16, 25]
Удобный способ создания списка значений по формуле.
Комбинирование с len() для изменения элементов
values = [10, 20, 30]
for i in range(len(values)):
values[i] *= 2
print(values)[20, 40, 60]
Изменение списка на месте через индексы.
Большие диапазоны и проверка памяти
big_range = range(10**8) # сто миллионов чисел
print(type(big_range))
print(big_range[100]) # доступ по индексу возможен<class 'range'> 100
Объект range не хранит все числа, поэтому не вызывает переполнения памяти. Доступ к отдельному элементу работает за O(1).
Проверка вхождения числа в диапазон
r = range(1, 100, 2)
print(25 in r)
print(26 in r)True False
Оператор in проверяет, принадлежит ли число последовательности без её генерации.
Цикл с range() и break
for i in range(10):
if i == 5:
break
print(i, end=' ')
print('\nВыполнен break')0 1 2 3 4 Выполнен break
Прерывание цикла по условию.
Вложенные циклы с range()
for x in range(2):
for y in range(3):
print(f'({x},{y})', end=' ')
print()(0,0) (0,1) (0,2) (1,0) (1,1) (1,2)
Генерация пар координат.
Использование range() с zip()
names = ['Аня', 'Боря', 'Вася']
avg = [4.5, 3.7, 5.0]
for idx, name, score in zip(range(1, len(names)+1), names, avg):
print(f'{idx}. {name}: {score}')1. Аня: 4.5 2. Боря: 3.7 3. Вася: 5.0
Объединение нескольких последовательностей с нумерацией.