Функция range() в Python очень часто используется для создания коллекции из последовательных чисел на лету, например 0, 1, 2, 3, 4. Это очень практично, поскольку готовую последовательность чисел можно использовать для индексации коллекций или, например, для итерации в циклах. В данной статье мы рассмотрим все варианты использования range(), включая нестандартные совместно с float.
В этом уроке мы познакомимся с методом range()
языка Python с помощью теории и нескольких закрепляющих примеров. Но сначала давайте дадим формальное определение этой функции.
Функция range() возвращает последовательность чисел, по умолчанию начинающуюся с 0, последовательно увеличивающуюся на 1 (по умолчанию) и останавливающуюся перед заданным числом.
Функция range()
возвращает неизменяемую последовательность чисел между заданным начальным целым числом и конечным целым числом.
Вот простейший пример, который проиллюстрирует сказанное:
print(list(range(6))) # Output: [0, 1, 2, 3, 4, 5]
Для чего это нужно? Для перебора любых диапазонов из чисел, например, в этой нашей статье мы подробно рассматриваем использование range() в рамках циклов.
Чтобы разобраться во всех тонкостях Python, оптимальный вариант это общение с практикующим специалистом, чтобы ему можно было задать вопросы и получить ответы. Для этого идеальный вариант курсы от Powercode Академии и Mate Academy.
Для начала предлагаю познакомиться с синтаксисом конструктора range()
.
Конструктор range()
имеет две формы определения:
range(stop) range(start, stop[, step])
range()
принимает в основном три аргумента, которые одинаково используются в обоих определениях:
range()
возвращает неизменяемый объект из последовательности чисел в зависимости от используемых определений:
Возвращаемое значение вычисляется по следующей формуле с заданными ограничениями:
r[n] = start + step*n (как для положительного, так и для отрицательного шага). где, n >=0 и r[n] < stop (для положительного шага). где, n >= 0 и r[n] > stop (для отрицательного шага).
start
и заканчивающуюся на stop — 1
.ValueError
.Если ограничение на значение не выполняется, возвращается пустая последовательность.
# empty range print(list(range(0))) # using range(stop) print(list(range(10))) # using range(start, stop) print(list(range(1, 10)))
Получим такой вывод:
[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9]
Примечание: мы предварительно преобразовали диапазон в список Python, поскольку range()
возвращает генератороподобный объект, который печатает вывод только по требованию.
Однако к объекту range, возвращаемому конструктором range, можно также обращаться по его индексу. Он поддерживает как положительные, так и отрицательные индексы.
Вы можете получить доступ к объекту range
по индексу следующим образом:
rangeObject[index]
range()
:Приведем пример:
start = 2 stop = 14 step = 2 print(list(range(start, stop, step)))
Вывод будет такой:
[2, 4, 6, 8, 10, 12]
Приведем пример, где все очевидно:
start = 2 stop = -14 step = -2 print(list(range(start, stop, step))) # value constraint not met print(list(range(start, 14, step)))
Мы получим такой вывод:
[2, 0, -2, -4, -6, -8, -10, -12] []
Python range()
работает только с целыми числами. Она не поддерживает тип float
, то есть мы не можем использовать число с плавающей точкой/десятичное значение в любом из ее аргументов.
Например, если вы используете range()
с аргументом float step
, вы получите ошибку TypeError 'float' object cannot be interpreted as an integer
.
for i in range(0, 1, 0.1): print(i) # Output TypeError: 'float' object cannot be interpreted as an integer
Библиотека NumPy имеет различные числовые и математические функции для работы с многомерными массивами и матрицами.
В NumPy есть функция arange()
для получения диапазона чисел с плавающей точкой. Она имеет тот же синтаксис и функциональность, что и встроенная в Python функция range()
. Кроме того, она позволяет использовать числа с плавающей точкой в аргументах start, stop
и step
.
Синтаксис функции np.arange()
:
np.arange (start, stop, step)
Как сгенерировать диапазон плавающих чисел в Python
pip install numpy
.import numpy as np
.start, stop
и step
передавайте числа с плавающей точкой. Например, np.arange(0.5, 6.5, 1.5)
вернет последовательность чисел с плавающей точкой, начиная с 0.5 и заканчивая 6.5.Приведем пример:
import numpy as np # range for floats with np.arange() for i in np.arange(0, 4.5, 0.5): print(i, end=', ') # Output 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, # Example 2 for i in np.arange(5.5, 15.5, 2.5): print(i, end=' ') # Output 5.5, 8.0, 10.5, 13.0,
Примечание: Как видно из результатов, мы получили десятичные числа от 0,0 до 4,0. Если вы заметили, np.arange()
не включил 4,5 в свой результат, потому что он никогда не включает в свой результат число остановки. Функция останавливается перед тем, как сделать последний шаг.
Рассмотрим, как использовать шаг с плавающей точкой вместе с целыми числами start
и stop
в np.arange()
для генерации чисел с плавающей точкой определенного интервала. В этом примере значение шага равно 2,5.
import numpy as np # float step for i in np.arange(1, 10, 2.5): print(i, end=', ') # Output 1.0, 3.5, 6.0, 8.5
Используйте функцию reversed()
, чтобы отобразить последовательность чисел float
, полученную с помощью np.arange()
, в порядке убывания.
import numpy as np # reverse range of floats for i in reversed(np.arange(5.5, 30.5, 5.5)): print(i, end=', ') # Output 27.5, 22.0, 16.5, 11.0, 5.5,
Что делать, если вы не хотите использовать библиотеку numpy только для функций arange()
и linspace()
?
В этом случае вы можете использовать генераторы Python и yield, чтобы написать пользовательскую функцию для генерации диапазона плавающих чисел.
Вы можете определить генератор для воспроизведения поведения встроенной функции Python range()
таким образом, чтобы он мог принимать числа с плавающей точкой и выдавать диапазон плавающих чисел.
Следующий код разделен на две части.
frange()
.frange()
, используя числа с плавающей точкой со следующими подходами: frange()
.frange()
.frange()
.Теперь давайте рассмотрим этот пример:
def frange(start, stop=None, step=None): # if set start=0.0 and step = 1.0 if not specified start = float(start) if stop == None: stop = start + 0.0 start = 0.0 if step == None: step = 1.0 print("start = ", start, "stop = ", stop, "step = ", step) count = 0 while True: temp = float(start + count * step) if step > 0 and temp >= stop: break elif step < 0 and temp <= stop: break yield temp count += 1 for i in frange(1.5, 5.5, 0.5): print("%g" % i, end=", ") print('\n') for i in frange(-0.1, -0.5, -0.1): print("%g" % i, end=", ") print('\n') for num in frange(0.5, 0.1, -0.1): print("%g" % num, end=", ") print('\n') for num in frange(0, 7.5): print("%g" % num, end=", ") print('\n') for num in frange(2.5, 7.5): print("%g" % num, end=", ") print('\n')
Мы получим такой вывод:
start = 1.5 stop = 5.5 step = 0.5 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, start = -0.1 stop = -0.5 step = -0.1 -0.1, -0.2, -0.3, -0.4, start = 0.5 stop = 0.1 step = -0.1 0.5, 0.4, 0.3, 0.2, start = 0.0 stop = 7.5 step = 1.0 0, 1, 2, 3, 4, 5, 6, 7, start = 2.5 stop = 7.5 step = 1.0 2.5, 3.5, 4.5, 5.5, 6.5,
Функция range()
в python создает коллекцию из последовательных чисел на лету, например 0, 1, 2, 3, 4. Это очень полезно, поскольку числа можно использовать для индексации коллекций, строк и т.д. Важно помнить, что функция range()
может быть вызвана несколькими различными способами, все возможные варианты мы описали выше.
Во второй половине статьи показано также нестандартное использование функции совместно с float
.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…