Освоение функции range() в Python: от основ к продвинутым сценариям
Что такое range() в Python?
Встроенный генератор range() в Python создаёт последовательность целых чисел на основе начала, конца и опционального шага. Если начальное значение опущено, оно по умолчанию равно 0, а последовательность увеличивается на 1 до достижения конечного значения (исключительно). Например, range(5) даёт 0, 1, 2, 3, 4. Функция незаменима при итерации с циклами for.
В этом уроке вы узнаете:
- Определение и синтаксис
range() - История:
range()противxrange() - Использование
range()с start, stop и step - Инкремент и декремент диапазонов
- Работа с плавающими пределами и альтернативы
- Использование
range()со списками, массивами и NumPyarange() - Продвинутые паттерны: объединение диапазонов, извлечение чётных чисел, генерация алфавитных последовательностей
Синтаксис
range(start, stop, step)
Параметры
- start (опционально): первое целое в последовательности. По умолчанию 0.
- stop (обязательно): верхняя граница (исключительно). Последовательность останавливается перед этим значением.
- step (опционально): интервал между последовательными значениями. По умолчанию 1.
Возвращаемое значение
Возвращает объект range, ведющий себя как неизменяемая последовательность целых чисел. При преобразовании в список отображается полная последовательность.
История функции range()
Введённая в Python 3, range() заменила старую xrange() из Python 2. Ключевые отличия:
| range() | xrange() |
|---|---|
| Возвращает неизменяемую последовательность чисел. | Возвращает объект генератора. |
| Потребляет память пропорционально длине последовательности. | Использует минимальную память; генерирует значения лениво. |
| Подходит для небольших и средних диапазонов. | Предпочтительна для больших диапазонов или бесконечных последовательностей. |
| Медленнее на очень больших диапазонах из-за выделения памяти. | Быстрее при итерации по большим диапазонам. |
Использование range()
Базовый пример, печатающий числа от 0 до 9:
for i in range(10):
print(i, end=" ")
Вывод:
0 1 2 3 4 5 6 7 8 9
Использование start и stop в range()
Указание начального значения сдвигает последовательность:
for i in range(3, 10):
print(i, end=" ")
Вывод:
3 4 5 6 7 8 9
Использование start, stop и step
Добавление шага позволяет контролировать интервал между числами:
for i in range(3, 10, 2):
print(i, end=" ")
Вывод:
3 5 7 9
Инкремент значений с положительным шагом
Стандартный шаг равен 1, но можно указать любое положительное целое:
for i in range(1, 30, 5):
print(i, end=" ")
Вывод:
1 6 11 16 21 26
Обратный диапазон: декремент с отрицательным шагом
Отрицательный шаг создаёт убывающую последовательность:
for i in range(15, 5, -1):
print(i, end=" ")
Вывод:
15 14 13 12 11 10 9 8 7 6
Использование чисел с плавающей точкой в range()
Встроенный range() принимает только целые числа. Попытка передать float вызывает TypeError:
for i in range(10.5):
print(i, end=" ")
Вывод:
Traceback (most recent call last): File "python_range.py", line 1, infor i in range(10.5): TypeError: 'float' object cannot be interpreted as an integer
Использование for-цикла с range()
Range часто сочетают с len() для итерации по индексам списка:
arr_list = ['Mysql', 'Mongodb', 'PostgreSQL', 'Firebase']
for i in range(len(arr_list)):
print(arr_list[i], end=" ")
Вывод:
Mysql Mongodb PostgreSQL Firebase
Использование range() как списка
Преобразование range в список простое:
print(list(range(10)))
Вывод:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Использование символов в range()
Хотя range() работает только с целыми, можно генерировать алфавитные последовательности, конвертируя символы в их коды Unicode:
def get_alphabets(startletter, stopletter, step):
for c in range(ord(startletter.lower()), ord(stopletter.lower()), step):
yield chr(c)
print(list(get_alphabets("a", "h", 1)))
Вывод:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
Доступ к элементам range
Значения можно получать через итерацию, индексацию или преобразование в список:
Итерация
for i in range(6):
print(i)
Вывод:
0 1 2 3 4 5
Индексация
startvalue = range(5)[0]
print("The first element in range is = ", startvalue)
secondvalue = range(5)[1]
print("The second element in range is = ", secondvalue)
lastvalue = range(5)[-1]
print("The last element in range is = ", lastvalue)
Вывод:
The first element in range is = 0 The second element in range is = 1 The last element in range is = 4
Использование list()
print(list(range(10)))
Вывод:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Пример: получение чётных чисел с range()
Для генерации чётных чисел до 18:
for i in range(2, 20, 2):
print(i, end=" ")
Вывод:
2 4 6 8 10 12 14 16 18
Объединение двух range()
Комбинирование двух объектов range можно сделать с itertools.chain:
from itertools import chain
print("Merging two range into one")
frange = chain(range(10), range(10, 20, 1))
for i in frange:
print(i, end=" ")
Вывод:
Merging two range into one 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Использование range() с NumPy
NumPy arange() зеркалит range(), но поддерживает шаги с плавающей точкой:
Синтаксис
arange(start, stop, step)
Пример
import numpy as np
for i in np.arange(10):
print(i, end=" ")
Вывод:
0 1 2 3 4 5 6 7 8 9
Диапазон с плавающей точкой в NumPy
for i in np.arange(0.5, 1.5, 0.2):
print(i, end=" ")
Вывод:
0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998
Из-за двоичной арифметики с плавающей точкой вывод иногда показывает длинные десятичные развертывания. При необходимости значения можно округлить.
Резюме
- range() генерирует последовательность целых чисел, заданную start, stop и step.
- Введена в Python 3; xrange() была предшественницей в Python 2.
- Используйте положительный шаг для возрастающих последовательностей, отрицательный — для убывающих.
- Числа с плавающей точкой не поддерживаются; используйте NumPy arange() для float.
- Доступ к элементам через итерацию, индексацию или преобразование
list(). - Объединяйте диапазоны с
itertools.chainили генерируйте пользовательские последовательности вроде алфавита. - Для больших числовых диапазонов учитывайте поведение генератора для эффективности памяти.
Python
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Lambda-функции в Python: практическое руководство по анонимным функциям
- Генераторы в Python: эффективная итерация и продвинутые сценарии
- Освоение лямбда-функций Python: практические примеры и лучшие практики
- Функция abs() в Python: вычисление абсолютных значений для чисел и комплексных чисел
- Функция round() в Python: подробное объяснение с практическими примерами
- Освоение функции range() в Python: от основ к продвинутым сценариям
- Освоение функции map() в Python: синтаксис, примеры и лучшие практики
- Освоение enumerate() в Python: циклы с индексами для списков, кортежей, строк и словарей
- Python list.count(): экспертное руководство с практическими примерами