Перейти к содержимому

Как заменить range в питоне

  • автор:

Функция range в Python

Функция range() в Python очень часто используется для создания коллекции из последовательных чисел на лету, например 0, 1, 2, 3, 4. Это очень практично, поскольку готовую последовательность чисел можно использовать для индексации коллекций или, например, для итерации в циклах. В данной статье мы рассмотрим все варианты использования range(), включая нестандартные совместно с float.

Детям из Мариуполя нужно 120 ноутбуков для обучения — подари старое «железо», пусть оно работает на будущее Украины

В этом уроке мы познакомимся с методом range() языка Python с помощью теории и нескольких закрепляющих примеров. Но сначала давайте дадим формальное определение этой функции.

Функция range() возвращает последовательность чисел, по умолчанию начинающуюся с 0, последовательно увеличивающуюся на 1 (по умолчанию) и останавливающуюся перед заданным числом.

Что делает функция Range в Python?

Функция range() возвращает неизменяемую последовательность чисел между заданным начальным целым числом и конечным целым числом.

Курс Микросервисная архитектура.

програма, яка допоможе опанувати головні принципи розробки мікросервісної архітектури, щоби ви могли проєктувати незалежні сервіси, а потім інтегрувати їх в одну систему. Практики буде багато.

Вот простейший пример, который проиллюстрирует сказанное:

print(list(range(6))) # Output: [0, 1, 2, 3, 4, 5]

Для чего это нужно? Для перебора любых диапазонов из чисел, например, в этой нашей статье мы подробно рассматриваем использование range() в рамках циклов.

Чтобы разобраться во всех тонкостях Python, оптимальный вариант это общение с практикующим специалистом, чтобы ему можно было задать вопросы и получить ответы. Для этого идеальный вариант курсы от Powercode Академии и Mate Academy.

Введение в range()

Для начала предлагаю познакомиться с синтаксисом конструктора range() .

Конструктор range() имеет две формы определения:

range(stop) range(start, stop[, step])

Параметры range(старт, стоп, шаг)

range() принимает в основном три аргумента, которые одинаково используются в обоих определениях:

  • start — целое число, начиная с которого должна быть возвращена последовательность целых чисел;
  • stop — целое число, до которого должна быть возвращена последовательность целых чисел. Диапазон целых чисел заканчивается на stop – 1;

Курс Project Manager.

Впроваджуйте покроковий алгоритм управління проєктами вже зараз. У цьому вам допоможе Павло Харіков — Head of IoT у Veon Group (Kyivstar).

range() Возвращаемое значение

range() возвращает неизменяемый объект из последовательности чисел в зависимости от используемых определений:

range(stop)

  • Возвращает последовательность чисел от 0 до stop – 1.

range(start, stop[, step])

Возвращаемое значение вычисляется по следующей формуле с заданными ограничениями:

r[n] = start + step*n (как для положительного, так и для отрицательного шага). где, n >=0 и r[n] < stop (для положительного шага). где, n >= 0 и r[n] > stop (для отрицательного шага).
  • (если step отсутствует) Шаг по умолчанию равен 1. Возвращает последовательность чисел, начинающуюся с start и заканчивающуюся на stop — 1 .
  • (если step равен нулю) Вызывает исключение ValueError .
  • (если step ненулевой) Проверяет, выполняется ли ограничение на значение, и возвращает последовательность в соответствии с формулой.

Если ограничение на значение не выполняется, возвращается пустая последовательность.

Курс UI/UX для геймдеву.

Під час навчання ви розробите проекти для портфоліо, що складається з 5 ключових аспектів UX/UI-дизайну, та отримаєш необхідні навички для професійного росту.

Примеры функции

Пример 1: Как работает диапазон в Python?

# 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]

Пример 2: Создайте список четных чисел между заданными числами с помощью range() :

start = 2 stop = 14 step = 2 print(list(range(start, stop, step)))

Вывод будет такой:

[2, 4, 6, 8, 10, 12]

Пример 3: Как range() работает с отрицательным шагом?

Приведем пример, где все очевидно:

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] []

Использование float с функцией range()

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

Диапазон плавающих значений с помощью функции arange() NumPy

Библиотека NumPy имеет различные числовые и математические функции для работы с многомерными массивами и матрицами.

В NumPy есть функция arange() для получения диапазона чисел с плавающей точкой. Она имеет тот же синтаксис и функциональность, что и встроенная в Python функция range() . Кроме того, она позволяет использовать числа с плавающей точкой в аргументах start, stop и step .

Синтаксис функции np.arange() :

np.arange (start, stop, step)

Как сгенерировать диапазон плавающих чисел в Python

  • Установите модуль numpy
    NumPy не входит в стандартную установку Python. Вы можете установить его с помощью pip install numpy .
  • Импортируйте модуль numpy
    Импортируйте модуль numpy с помощью оператора import numpy as np .
  • Используйте numpy.arange()
    В качестве аргументов 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,

Диапазон плавающих чисел с использованием генератора и yield

Что делать, если вы не хотите использовать библиотеку numpy только для функций arange() и linspace() ?

В этом случае вы можете использовать генераторы Python и yield, чтобы написать пользовательскую функцию для генерации диапазона плавающих чисел.

Вы можете определить генератор для воспроизведения поведения встроенной функции Python range() таким образом, чтобы он мог принимать числа с плавающей точкой и выдавать диапазон плавающих чисел.

Следующий код разделен на две части.

  1. Пользовательская функция frange() .
  2. Второй раздел тестирует пользовательскую функцию frange() , используя числа с плавающей точкой со следующими подходами:
    1. С положительными плавающими числами в аргументах frange() .
    2. С отрицательными плавающими числами в аргументах frange() .
    3. С отрицательными и положительными плавающими числами в аргументах 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 
    

    Мы получим такой вывод:

    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 .

    Курс Проджект-менеджмент в IT.

    Навчайся у найкращих, курс проводить Тарас Федорук, найкращий PM за версією Ukrainian IT Awards у 2019 році.

    Python цикл for — for i in range

    Циклы являются одной из основных управляющих конструкций в любом языке программирования, и Python не является исключением.

    В этой статье мы рассмотрим несколько примеров использования циклов for с функцией range() в Python.

    Циклы for в Python

    Циклы for повторяют определённый код для некоторого набора значений.

    Из документации Python можно узнать, что в нем циклы for работают несколько иначе, чем в таких языках, как JavaScript или C.

    Цикл for присваивает итерируемой переменной каждое значение из предоставленного списка, массива или строки и повторяет код в теле цикла for для каждого установленного таким образом значения переменной-итератора.

    В приведенном ниже примере мы используем цикл for для вывода каждого числа в нашем массиве.

    Python: функция range()

    Функция range является одной из встроенных функций, доступных в Python. Он генерирует серию целых чисел, от значения start до stop, указанного пользователем. Мы можем использовать его для цикла for и обходить весь диапазон как список.

    Функция range() принимает один обязательный и два необязательных параметра. Это работает по-разному с различными комбинациями аргументов. В этом руководстве мы познакомим вас со всеми возможностями данной функции Python, чтобы вы могли легко использовать ее в своих задачах.

    Существует два варианта функции range() в Python 3. Давайте проверим их синтаксис по одному.

    Range(Stop)

    Это самая основная форма range(). Требуется один аргумент для указания исключительного (Stop) верхнего предела.

    «0» становится отправной точкой для генерации чисел. Смотрите пример ниже.

    >>> robj = range(5) >>> for it in robj: . print(it, end = ",") . 0,1,2,3,4,

    Посмотрите другой пример. Диапазон со стоп-значением «0» генерирует пустой диапазон, то есть нулевые элементы.

    >>> r = range( 0 ) >>> print( r ) range(0, 0) >>> len( r ) 0

    Если вы предоставляете нецелочисленное значение остановки, тогда оно вызывает ошибку TypeError.

    >>> range(1.1) TypeError: 'float' object cannot be interpreted as an integer
    Range(Start, Stop[, Step])

    Это немного сложная форма функции range. Здесь вы можете создать серию чисел с общей разницей по вашему выбору.

    Вы можете передать следующие три аргумента:

    • 'start' -> Начальная точка для генерации чисел в range()
    • 'stop' -> Это точка перед завершением range().
    • 'step' -> Общая разница или счетчик приращений между двумя значениями

    Обратите внимание на следующие моменты при использовании range() с вышеуказанной подписью.

    • Значение по умолчанию «step» равно 1. Оно вступает в действие, когда аргумент step отсутствует.
    • Нулевое значение для «шага» приводит к ошибке ValueError.
    • Нецелое значение вызывает TypeError.
    • Ненулевое целочисленное значение шага (> = стоп) по крайней мере вернет диапазон с одним элементом.

    Обратите внимание, что функция range принимает только целочисленные аргументы. Чтобы создать диапазон с плавающей точкой, следуйте данному руководству: Генерация плавающего диапазона в Python

    Функция Python Range() с примерами

    Посмотрите примеры кода ниже, чтобы понять эту функцию немного глубже:

    Использование параметров Start, Stop и Step
    >>> # Range with two arguments . for it in range(1, 7): . print(it, end = ", ") . 1, 2, 3, 4, 5, 6, >>> >>> # Range with three arguments . for it in range(1, 7, 3): . print(it, end = ", ") . 1, 4, >>>
    Использование отрицательных значений start, stop и step

    Мы можем передавать отрицательные значения для всех параметров диапазона, таких как аргументы start, stop и step.

    В приведенном ниже примере мы предоставляем отрицательное значения для stop и step, чтобы выполнить цикл в обратном направлении.

    >>> # Range with -ve values . for it in range(10, -1, -2): . print(it, end = ", ") . 10, 8, 6, 4, 2, 0
    Генерация диапазона как арифметический ряд

    Давайте создадим арифметический ряд (i = 10, n = 100, d = 10), используя метод range().

    >>> list(range( 10, 100, 10 )) [10, 20, 30, 40, 50, 60, 70, 80, 90]

    Объект range() работает как генератор. Следовательно, мы преобразовали его в список, чтобы мы могли распечатать значения.

    Перебор списка с использованием range()

    Мы можем использовать функцию Python range() для обхода списка. Смотрите пример ниже.

    >>> books = ['python', 'data science', 'machine learning', 'AI', 'deep learning'] >>> size = len(books) >>> for it in range(0, size): . print(books[it]) . python data science machine learning AI deep learning

    Преобразовать диапазон в список

    Python 3 range() создает объект типа генератора. По ходу цикла он выбирает значения одно за другим, а не получает их все сразу.

    В действительности выходные данные функции range() представляют собой неизменяемую последовательность целых чисел. Следовательно, мы можем преобразовать то же самое в список Python. Мы будем использовать конструктор списка для преобразования вывода диапазона в список.

    Смотрите пример ниже.

    >>> r = range( 10, 100, 10 ) >>> type( r ) >>> r = list( r ) >>> type( r ) >>> print(r) [10, 20, 30, 40, 50, 60, 70, 80, 90]

    Верхний предел range включительно

    По умолчанию Python range() по умолчанию исключает последнее число. Следовательно, он всегда игнорирует верхний предел своего вывода.

    Однако мы можем внести следующие изменения в наш код, чтобы разрешить это.

    • Увеличьте значение stop с помощью счетчика шагов
    • Передайте новое значение stop в функцию range()

    После внесения вышеуказанных изменений, давайте посмотрим, что происходит:

    >>> start = 0 >>> stop = 7 >>> step = 1 >>> >>> stop = stop + step >>> >>> for it in range(start, stop, step): . print(it, end = ", ") . 0, 1, 2, 3, 4, 5, 6, 7

    Range Python против Xrange

    Мы изложили несколько отличий и некоторые ключевые факты о функциях range и xrange.

    В Python 2.x было две функции диапазона: range() и xrange()

    • Разница между ними заключается в том, что range() возвращает список, тогда как последний возвращает итератор.

    В Python 3.x у нас есть только одна функция range(). Это реализация xrange() из версии 2.x.

    • Новая функция range() не возвращает ни список, ни итератор. Он получает новый тип, известный как объект диапазона.
    • Мы можем перебирать объект диапазона как список. Но это немного отличается, так как мы не можем нарезать его.
    • В отличие от итераторов, которые выдают одно значение за раз, функция range() получает все числа одновременно. Следовательно, он имеет высокие требования к памяти.
    • Тем не менее, диапазон работает быстрее с небольшим набором чисел.
    # python 2.x >>> type(range(1)) type 'list' >>> type(xrange(10)) class 'xrange' # python 3.x >>> type(range(10)) class 'range'

    Использование индекса с результатом работы range Python

    Да, range() возвращает уникальный объект, который обладает свойствами, подобными списку и генератору.

    Поскольку он действует как последовательность, мы можем получить доступ к его элементам, используя индексы. Он допускает как положительные так и отрицательные значения индекса.

    # Indexing Python range object >>> print(range(0, 7)[1]) 1 >>> print(range(0, 7)[6]) 6

    Объединить вывод двух функций range()

    В Python нет встроенной функции для объединения результатов двух результатов range(). Тем не менее, мы все еще можем сделать это.

    Существует модуль с именем 'itertools', который имеет функцию chain() для объединения двух объектов диапазона.

    Смотрите пример ниже.

    >>> from itertools import chain >>> merged = chain(range(5), range(10, 15)) >>> for it in merged: . print(it, end = ", ") . 0, 1, 2, 3, 4, 10, 11, 12, 13, 14

    В заключение

    Вот несколько важных фактов о функции Python range():

    • В качестве аргументов допускаются только целочисленные значения.
    • Мы не можем предоставить параметр типа string или float внутри функции range().
    • Аргументы могут быть либо как положительные так и отрицательные.
    • Он не принимает «0» в качестве значения step. Если шаг равен «0», функция генерирует ошибку ValueError.

    Описание функции range с примерами для Python 3

    Если вы опытный разработчик, или даже новичок, вы, несомненно, слышали о функции Python range() . Но что же она делает? В двух словах, она генерирует список чисел, который обычно используется для работы с циклом for . Существует много вариантов использования. Зачастую, ее используют, когда нужно выполнить действие X раз, где вы можете использовать индекс. В других случаях вам, возможно, понадобится сделать итерацию по списку (или по другому итерируемому объекту), имея доступ к индексу.

    Функция range() имеет небольшие отличия в работе на версии Python 2.x и 3.x , тем не менее у них остается одинаковая концепция. К этому вопросу мы доберемся немного позже.

    Параметры range: star, stop, шаг

    Функция range() принимает три параметра, например:

    range(stop)
    1. stop: количество целых чисел для генерации, начиная с нуля. Например, range(3) == [0, 1, 2] .
    range([start], stop[, step])
    1. start: число начала последовательности.
    2. stop: генерирует число до данного числа, но не включая его.
    3. step: разница между каждым числом из последовательности.
    • Все параметры должны быть целыми числами.
    • Каждый из параметров может быть положительным или отрицательным.
    • range() (и Python в целом) основана на индексе 0, означая, что список индексов начинается с 0, а не 1, например. Синтаксис, предоставляющий доступ к первому элементу в списке — mylist[0] . Поэтому, последнее целое число, сгенерированное функцией range() зависит от stop , но не будет включать его. Например, range(0, 5) генерирует целые числа 0, 1, 2, 3, 4, но не включая 5.

    Примеры функции range()

    Простое применение с циклом for:

     
    >>> # 5 чисел начиная с 0 >>> for i in range(5): print(i) 0 1 2 3 4 >>> # числа с 3 до 6 (не включая его) >>> for i in range(3, 6): print(i) 3 4 5 >>> # числа с 4 до 10 (не включая его) с шагом 2 >>> for i in range(4, 10, 2): print(i) 4 6 8 >>> # числа с 0 до -10 (не включая его) с шагом -2 >>> for i in range(0, -10, -2): print(i) 0 -2 -4 -6 -8

    А это пример итерации по списку.

     
    >>> my_list = ['один', 'два', 'три', 'четыре', 'пять'] >>> my_list_len = len(my_list) >>> for i in range(0, my_list_len): print(my_list[i]) один два три четыре пять

    В качестве параметра stop мы передали длину списка (5).

    Range полезна в итерации с условиями. Рассмотрим примере песни “99 Bottles of Beer on the Wall…” со следующим кодом:

     
    for i in range(99, 0, -1): if i == 1: print('1 bottle of beer on the wall, 1 bottle of beer!') print('So take it down, pass it around, no more bottles of beer on the wall!') elif i == 2: print('2 more bottles of beer on the wall, 2 more bottles of beer!') print('So take one down, pass it around, 1 more bottle of beer on the wall!') else: print(' bottles of beer on the wall, bottles of beer!'.format(i)) print('So take it down, pass it around, more bottles of beer on the wall!'.format(i - 1))

    Мы получаем следующий результат:

    99 bottles of beer on the wall, 99 bottles of beer! So take one down, pass it around, 98 more bottles of beer on the wall! 98 bottles of beer on the wall, 98 bottles of beer! So take one down, pass it around, 97 more bottles of beer on the wall! 97 bottles of beer on the wall, 97 bottles of beer! So take one down, pass it around, 96 more bottles of beer on the wall! . 3 bottles of beer on the wall, 3 bottles of beer! So take one down, pass it around, 2 more bottles of beer on the wall! 2 more bottles of beer on the wall, 2 more bottles of beer! So take one down, pass it around, 1 more bottle of beer on the wall! 1 bottle of beer on the wall, 1 bottle of beer! So take it down, pass it around, no more bottles of beer on the wall!

    Прекрасно! Наконец-то вы видите настоящую силу Python. Если вы еще немного в замешательстве, рекомендую прочитать статью 99 бутылок пива (Википедия).

    range против функций xrange в python

    Вы должно быть слышали о функции, известной как xrange() . Эта функция представлена в Python 2.x, и была переименована в range() в Python 3.x. Так в чем же разница? В Python 2.x range() создавала список, а xrange() возвращала итератор — объект последовательности. Мы можем увидеть это в следующем примере:

    # Python 3.x >>> range(1) range(0, 1) >>> type(range(1)) range'> # Python 2.x >>> range(1) [0] >>> type(range(1)) list'>

    В Python 3.x. у функции range() есть свой собственный тип. Говоря языком простых терминов, если вы хотите воспользоваться range() в цикле for , вы сделаете это с легкостью. Однако вы не можете использовать его как объект списка. Например, вы не можете разбить на срезы тип range .

    Когда вы используете итератор, каждый цикл оператора for выдает мгновенно последующий номер на лету. В то время как исходная функция range() производит все числа мгновенно, прежде чем цикл for начнет выполняться.

    Проблема с исходной функцией range() (в Python 2.x) заключалась в том, что она требовала очень большой объем памяти при создании большого количества чисел. Однако в нем, как правило, можно работать быстрее с небольшим количеством чисел.

    Обратите внимание, что в Python 3.x вы все равно можете создать список, передав генератор, возвращенный функции list() . Следующим образом:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *