Range: примеры (PYTHON)
range(start: int, stop: int, step: int = 1): range objectОснова функции range
Функция range()
генерирует последовательность целых чисел. Её часто применяют для выполнения повторяющихся действий заданное количество раз в циклахfor, а также для создания последовательностей чисел.Синтаксис функции: range(stop), range(start, stop) или range(start, stop, step).
Аргументы:
- start (необязательный): начало последовательности. По умолчанию равен 0.
- stop (обязательный): конец последовательности. Число с этим значением не включается в результат.
- step (необязательный): шаг между числами. По умолчанию равен 1. Может быть отрицательным для генерации убывающей последовательности.
Возвращаемое значение: Объект типа range. Это итерируемый объект, который не хранит все числа в памяти одновременно, а генерирует их по мере необходимости. Для получения списка чисел используется функция list().
Основные примеры
Использование с одним аргументом (stop):
for i in range(5):
print(i, end=' ')0 1 2 3 4
Использование с двумя аргументами (start, stop):
print(list(range(2, 7)))[2, 3, 4, 5, 6]
Использование с тремя аргументами (start, stop, step):
print(list(range(0, 10, 2)))[0, 2, 4, 6, 8]
Использование отрицательного шага:
print(list(range(5, 0, -1)))[5, 4, 3, 2, 1]
Похожие функции в Python
enumerate(iterable, start=0): Возвращает пары (индекс, элемент) для итерируемого объекта. Удобна, когда в цикле нужен и элемент, и его порядковый номер.
itertools.count(start=0, step=1): Создает бесконечный итератор чисел. Требует осторожности, чтобы избежать бесконечного цикла.
Срезы (slicing) списков и строк: Позволяют получать подпоследовательности по индексам. Более универсальны для работы с уже существующими последовательностями.
Функцию range предпочтительнее использовать для генерации целочисленных последовательностей, особенно в циклах for. enumerate применяют при работе с индексами и элементами одновременно. itertools.count используют для специальных случаев с нестандартным шагом или бесконечными последовательностями.
Аналоги в других языках
PHP: Функция range() возвращает массив.
print_r(range(0, 4));Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
)JavaScript: Нет встроенной функции. Часто используют Array.from() или циклы.
console.log(Array.from({length: 5}, (_, i) => i));[0, 1, 2, 3, 4]
Java: Используют цикл for или IntStream.range().
IntStream.range(0, 5).forEach(System.out::print);01234
SQL (PostgreSQL): Используют generate_series.
SELECT * FROM generate_series(0, 4);0 1 2 3 4
C#: Метод Enumerable.Range.
foreach (int i in Enumerable.Range(0, 5)) Console.Write(i);01234
Lua: Цикл for с указанием начала, конца и шага.
for i=0, 4 do io.write(i) end01234
Go: Только цикл for.
for i := 0; i < 5; i++ { fmt.Print(i) }01234
Kotlin: Используют операторы .., until, downTo и step.
for (i in 0 until 5) print(i)01234
Типичные ошибки
1. Передача нецелочисленных аргументов:
list(range(0.1, 5.5))TypeError: 'float' object cannot be interpreted as an integer
2. Бесконечный или пустой цикл из-за неверного шага:
for i in range(5, 10, -1):
print(i) # Ничего не выведет3. Ожидание, что range включает конечное значение:
for i in range(1, 5):
print(i, end=' ')
print("\nБыло выведено 4 числа, а не 5.")1 2 3 4 Было выведено 4 числа, а не 5.
4. Попытка прямого сложения объектов range:
r1 = range(0, 3)
r2 = range(3, 6)
print(r1 + r2)TypeError: unsupported operand type(s) for +: 'range' and 'range'
Изменения в последних версиях
В Python 3 функция range всегда возвращает объект типа range, а не список, как это было в Python 2. Это улучшило эффективность использования памяти.
Начиная с Python 3.2, объект range поддерживает новые методы, такие как count() и index(), что делает его поведение более похожим на последовательность.
В Python 3.8 появилась возможность использовать синтаксис с присваиванием (:=) внутри вызова range, хотя это не специфично только для этой функции.
Расширенные примеры
1. Генерация списка чётных чисел:
even_numbers = list(range(0, 20, 2))
print(even_numbers)[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
2. Индексация коллекции в обратном порядке:
my_list = ['a', 'b', 'c', 'd']
for i in range(len(my_list)-1, -1, -1):
print(my_list[i], end=' ')d c b a
3. Создание числовых последовательностей для математических вычислений:
squares = [x**2 for x in range(10)]
print(squares)[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
4. Проверка вхождения числа в диапазон:
if 7 in range(5, 10):
print("Число 7 находится в диапазоне от 5 до 9")Число 7 находится в диапазоне от 5 до 9
5. Использование с zip для параллельной итерации:
names = ['Анна', 'Борис', 'Кирилл']
for i, name in zip(range(1, len(names)+1), names):
print(f'{i}. {name}')1. Анна 2. Борис 3. Кирилл
6. Создание кортежа из объекта range:
tuple_range = tuple(range(3))
print(tuple_range)(0, 1, 2)
7. Эмуляция цикла с плавающим шагом (через масштабирование):
# Генерация значений от 0 до 1 с шагом 0.1
for i in range(0, 11, 1):
print(round(i/10, 1), end=' ')0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
8. Использование в условиях для проверки длины:
data = [1, 2, 3]
if len(data) in range(1, 5):
print("Длина списка находится между 1 и 4")Длина списка находится между 1 и 4