Range: примеры (PYTHON)

Руководство по использованию функции 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) end
01234

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. Генерация списка чётных чисел:

Пример python
even_numbers = list(range(0, 20, 2))
print(even_numbers)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

2. Индексация коллекции в обратном порядке:

Пример python
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. Создание числовых последовательностей для математических вычислений:

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

4. Проверка вхождения числа в диапазон:

Пример python
if 7 in range(5, 10):
    print("Число 7 находится в диапазоне от 5 до 9")
Число 7 находится в диапазоне от 5 до 9

5. Использование с zip для параллельной итерации:

Пример python
names = ['Анна', 'Борис', 'Кирилл']
for i, name in zip(range(1, len(names)+1), names):
    print(f'{i}. {name}')
1. Анна
2. Борис
3. Кирилл

6. Создание кортежа из объекта range:

Пример python
tuple_range = tuple(range(3))
print(tuple_range)
(0, 1, 2)

7. Эмуляция цикла с плавающим шагом (через масштабирование):

Пример python
# Генерация значений от 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. Использование в условиях для проверки длины:

Пример python
data = [1, 2, 3]
if len(data) in range(1, 5):
    print("Длина списка находится между 1 и 4")
Длина списка находится между 1 и 4

питон range function comments

En
Range Return a sequence of numbers