Объект range для работы с целыми числами в Python

Раздел: Основы Python -> Работа с числами

Работа с функцией range для целых чисел

Функция range создаёт объект с последовательностью целых чисел. Такой объект занимает мало памяти, потому что числа вычисляются по мере обращения. Основное применение range это организация циклов с известным числом повторений и формирование числовых индексов.

Как получить последовательность целых чисел от нуля до нужного значения?

Базовый вызов range(stop) создаёт числа от 0 до stop без включения stop. Чтобы увидеть содержимое объекта range, его преобразуют в список.

numbers = range(5)
print(list(numbers))

вывести обратное число python (переворот числа в python)

[0, 1, 2, 3, 4]

вывести первое число python (получение первого элемента в python)

В цикле for не нужно преобразовывать range в список, цикл перебирает элементы напрямую.

for i in range(4):
    print(i, i * i)

сумма цифр python (сумма цифр числа в python)

0 0
1 1
2 4
3 9

Python range int (функция range с целыми числами в python)

Как задать начало и конец числового диапазона?

Второй вариант вызова, range(start, stop), позволяет начать последовательность не с нуля. Правая граница stop снова не входит в результат.

list(range(2, 7))

нечетное python (проверка числа на нечетность в python)

[2, 3, 4, 5, 6]

как посчитать сумму цифр python (как посчитать сумму цифр в python)

Что делать, если нужен шаг больше единицы?

Третий параметр step задаёт величину приращения между соседними числами. Шаг может быть только целым числом. Такой вызов полезен для формирования чётных чисел, расписаний и любых равномерных последовательностей.

list(range(0, 20, 5))

как посчитать сумму python (как посчитать сумму в python)

[0, 5, 10, 15]

Python посчитать количество цифр (посчитать количество цифр в python)

Если нужна убывающая последовательность, используется отрицательный шаг.

list(range(10, 0, -2))
[10, 8, 6, 4, 2]

Как перебрать элементы списка по индексам?

Длина списка передаётся в range, а индекс используется для обращения к элементу. Такой способ удобен, когда нужно изменять элементы списка по позиции.

fruits = ['яблоко', 'груша', 'слива']
for index in range(len(fruits)):
    print(index, fruits[index])
0 яблоко
1 груша
2 слива

Как получить обратный порядок чисел?

Функция reversed возвращает итератор по range в обратную сторону, не изменяя исходный объект.

list(reversed(range(4)))
[3, 2, 1, 0]

Отрицательный шаг range(3, -1, -1) даёт тот же результат, но reversed часто читается проще.

Как создать список квадратов с помощью range?

Генератор списка перебирает все числа из range и сразу помещает результат в новый список.

squares = [n * n for n in range(1, 6)]
print(squares)
[1, 4, 9, 16, 25]

Почему появляется ошибка о нецелом числе?

Все аргументы range должны быть целыми. Передача числа с плавающей точкой приводит к TypeError.

range(1.5)
TypeError: 'float' object cannot be interpreted as an integer

Для превращения float в int используют int(value).

limit = 3.8
list(range(int(limit) + 1))
[0, 1, 2, 3]

Строки тоже не принимаются. Число из строки преобразуется через int() перед вызовом range.

limit = '6'
list(range(int(limit)))
[0, 1, 2, 3, 4, 5]

Почему range с нулевым шагом не работает?

Шаг не должен быть равен нулю. Если передать step=0, возникает ValueError.

range(0, 10, 0)
ValueError: range() arg 3 must not be zero

Нулевой шаг означал бы бесконечную последовательность одинаковых чисел, поэтому Python запрещает такой вызов.

Как избежать ошибки «не хватает последнего числа»?

В range правая граница не включается. Для включения right используют right + 1.

right = 8
list(range(right + 1))
[0, 1, 2, 3, 4, 5, 6, 7, 8]

Если start больше stop при положительном шаге, последовательность пуста.

list(range(5, 2))
[]

Что возвращает range с одинаковыми start и stop?

Пример
list(range(4, 4))
[]

Пустой результат объясняется тем, что число, равное stop, не включается в диапазон.

Как ведёт себя range, когда шаг больше длины интервала?

Пример
list(range(2, 10, 20))
[2]

В последовательность попадает только начальное число, если следующее значение выходит за границу stop.

Как получить значения start, stop и step у объекта range?

Пример
r = range(5, 30, 5)
print(r.start)
print(r.stop)
print(r.step)
print(list(r))
5
30
5
[5, 10, 15, 20, 25]

Атрибуты start, stop и step доступны напрямую, их можно использовать для проверки параметров диапазона.

Как вычислить длину range и получить элемент по индексу?

Пример
r = range(10, 20, 2)
print(len(r))
print(r[0])
print(r[2])
print(r[-1])
5
10
14
18

range поддерживает операции последовательности, поэтому длина и индексы доступны без преобразования в список.

Как проверить, есть ли число в range?

Пример
r = range(0, 100, 10)
print(30 in r)
print(35 in r)
True
False

Проверка вхождения в range выполняется быстро, так как Python вычисляет позицию по шагу, а не перебирает все элементы.

Как посчитать сумму чисел из range?

Пример
r = range(1, 101)
print(sum(r))
5050

Функция sum принимает range напрямую, это удобно для вычислений без создания списка.

Можно ли получить часть range через срез?

Пример
r = range(0, 30, 3)
print(r[:4])
print(list(r[:4]))
print(r[3:])
print(list(r[3:]))
range(0, 12, 3)
[0, 3, 6, 9]
range(9, 30, 3)
[9, 12, 15, 18, 21, 24, 27]

Срезы range снова являются объектами range с пересчитанными границами.

Почему range подходит для работы с большими границами?

Пример
import sys
r = range(1_000_000)
lst = list(range(1_000_000))
print(sys.getsizeof(r))
print(sys.getsizeof(lst))
48
8000072

Объект range хранит только параметры последовательности, поэтому размер не зависит от длины. Список хранит все элементы и занимает значительно больше памяти.

Как сформировать последовательность отрицательных чисел?

Пример
print(list(range(-5, 0)))
print(list(range(-10, 0, 2)))
[-5, -4, -3, -2, -1]
[-10, -8, -6, -4, -2]

Отрицательные start и step позволяют работать с числами меньше нуля так же, как с положительными.

Как перебрать символы строки в обратном порядке по индексу?

Пример
word = 'Python'
for i in range(len(word) - 1, -1, -1):
    print(i, word[i])
5 n
4 o
3 h
2 t
1 y
0 P

Конструкция range(len(word) - 1, -1, -1) создаёт индексы от последнего к первому.

Как перебирать элементы без ручного индекса?

Пример
colors = ['red', 'green', 'blue']
for idx, color in enumerate(colors):
    print(idx, color)
0 red
1 green
2 blue

enumerate создаёт пары индекс и значение, что часто удобнее связки range(len(...)).

Как объединить range со списком в параллельном цикле?

Пример
names = ['Аня', 'Борис', 'Вера']
for number, name in zip(range(1, 4), names):
    print(number, name)
1 Аня
2 Борис
3 Вера

Параллельный обход ограничен длиной самого короткого из переданных объектов.

Как получить чётные и нечётные числа в заданном интервале?

Пример
evens = list(range(0, 21, 2))
odds = list(range(1, 20, 2))
print(evens)
print(odds)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

Начальное значение определяет, с какого числа начнётся отсчёт, а шаг 2 задаёт регулярность.

Как построить цикл для таблицы умножения?

Пример
for a in range(1, 4):
    for b in range(1, 4):
        print(a * b, end=' ')
    print()
1 2 3 
2 4 6 
3 6 9 

Вложенные циклы с range позволяют перебирать пары чисел.

Что делать для дробного шага?

Пример
range(0, 1, 0.1)
TypeError: 'float' object cannot be interpreted as an integer

range не принимает дробные значения. Для равномерного ряда с дробным шагом подойдёт библиотека numpy с функцией arange или цикл while.

Почему range(0, 10, -1) возвращает пустой список?

Пример
list(range(0, 10, -1))
[]

При отрицательном шаге start должен быть больше stop. Иначе Python не может уменьшить значение от start до stop.

Функция range с целыми числами в Python - comments

En
Python range int (python)