Объект range для работы с целыми числами в 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.