Функция range в Python — основы и примеры с циклом for, обратная итерация
Что делает функция range в Python?
Если вы опытный разработчик, или даже новичок, вы, несомненно, слышали о функции Python range()
. Но что же она делает? В двух словах, она генерирует список чисел, который обычно используется для работы с циклом for
. Существует много вариантов использования. Зачастую, ее используют, когда нужно выполнить действие X раз, где вы можете использовать индекс. В других случаях вам, возможно, понадобится сделать итерацию по списку (или по другому итерируемому объекту), имея доступ к индексу.
Функция range()
имеет небольшие отличия в работе на версии Python 2.x и 3.x , тем не менее у них остается одинаковая концепция. К этому вопросу мы доберемся немного позже.
Параметры range: star, stop, шаг
Функция range()
принимает три параметра, например:
range(stop)
- stop: количество целых чисел для генерации, начиная с нуля. Например,
range(3) == [0, 1, 2]
.
range([start], stop[, step])
- start: число начала последовательности.
- stop: генерирует число до данного числа, но не включая его.
- step: разница между каждым числом из последовательности.
Обратите внимание:
- Все параметры должны быть целыми числами.
- Каждый из параметров может быть положительным или отрицательным.
range()
(и Python в целом) основана на индексе 0, означая, что список индексов начинается с 0, а не 1, например. Синтаксис, предоставляющий доступ к первому элементу в списке —mylist[0]
. Поэтому, последнее целое число, сгенерированное функциейrange()
зависит отstop
, но не будет включать его. Например,range(0, 5)
генерирует целые числа 0, 1, 2, 3, 4, но не включая 5.
Примеры функции range()
Простое применение с циклом for:
Копировать Скопировано Use a different Browser
>>> # 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
А это пример итерации по списку.
Копировать Скопировано Use a different Browser
>>> 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…” со следующим кодом:
Копировать Скопировано Use a different Browser
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('{0} bottles of beer on the wall, {0} bottles of beer!'.format(i)) print('So take it down, pass it around, {0} 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, и была переименована в
в 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
, вы сделаете это с легкостью. Однако вы не можете использовать его как объект списка. Например, вы не можете разбить на срезы тип
.
Когда вы используете итератор, каждый цикл оператора for
выдает мгновенно последующий номер на лету. В то время как исходная функция range()
производит все числа мгновенно, прежде чем цикл for
начнет выполняться.
Проблема с исходной функцией range()
(в Python 2.x) заключалась в том, что она требовала очень большой объем памяти при создании большого количества чисел. Однако в нем, как правило, можно работать быстрее с небольшим количеством чисел.
Обратите внимание, что в Python 3.x вы все равно можете создать список, передав генератор, возвращенный функции
. Следующим образом:
Копировать Скопировано Use a different Browser
>>> list_of_ints = list(range(3)) >>> list_of_ints [0, 1, 2]
Чтобы увидеть разницу в скорости действия в функции range() и xrange(), посмотрите эту статью (english).
Использование float с функцией range()
К сожалению, функция range()
не поддерживает тип float
. Тем не менее, не спешите расстраиваться! Мы можем легко использовать его с помощью данной функции. Есть несколько способов сделать это, вот один из них.
Копировать Скопировано Use a different Browser
>>> # все аргументы обязательны >>> def frange(start, stop, step): i = start while i >> for i in frange(0.5, 1.0, 0.1): print(i) 0.5 0.6 0.7 0.8 0.9 1.0
Тест на знание функции Range
Какое из следующих утверждений НЕ верно?
По умолчанию, функция range начинается с 0
Параметры функции range могут быть отрицательными целыми числами
В цикле «for i in range(4)» переменная «i» будет 0, 1, 2, 3, 4
Невозможно получить последовательность 6, 12, 18, 24 с помощью range
Невозможно получить последовательность 24, 18, 12, 6 с помощью range
Какой код вернет список [1, 6, 11, 16, 21, 26]?
list(range(1, 30, 5))
list(range(27, 5))
list(range(1,26,5))
list(range(26))
Выберите код, который вернет наибольшее значение? (функция sum считает сумму значений списка))
sum(list(range(10, 1000, -1)))
sum(list(range(9, 99, 99)))
sum(list(range(5)))
sum(list(range(0, 10, 5)))
Сколько итераций будет в этом цикле
for i in range(-1, -10)
?
Какой код вернет True?
list(range(-2,-50,-20)) == [-2, -22, -42]
list(range(-1,5)) == [0, 1, 2, 3, 4]
list(range(-10)) == [-9, -8, -7, -6, -5, -4, -3, -2, -1]
list(range(2,10, 2)) == [2, 4, 6, 8, 10]
list(range(1,11)) == [1, 2, 3, 4, 5, 7, 8, 9, 10]
{{title}}
{{image}}
{{content}}
{{/global}}
Поделиться результатами через
Facebook Twitter VK
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 и xrange
Использование индекса с результатом работы 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.
Функция Python range() — GeeksforGeeks
Функция Python range() возвращает последовательность чисел в заданном диапазоне. Чаще всего его используют для повторения последовательности чисел с использованием циклов Python.
Синтаксис диапазона Python () Функция
Синтаксис: Диапазон (старт, остановка, шаг)
Параметр:
- Start : [Опционально] Начальная стоимость последовательности
- Забега следующее значение после конечного значения последовательности
- шаг: [ необязательный ] целочисленное значение, обозначающее разницу между любыми двумя числами в последовательности.
Возврат: Возвращает объект типа диапазона.
Example of Python range() function
Python3
|
Output:
0 1 2 3 4
В чем польза функции диапазона в Python
Проще говоря, range() позволяет пользователю генерировать серию чисел в заданном диапазоне. В зависимости от того, сколько аргументов пользователь передает функции, пользователь может решить, где будет начинаться и заканчиваться этот ряд чисел, а также насколько велика будет разница между одним числом и следующим. Функция Python range() может быть инициализирована тремя способами.
- диапазон (стоп) принимает один аргумент.
- диапазон (старт, стоп) принимает два аргумента.
- диапазон (старт, стоп, шаг) принимает три аргумента.
Диапазон Python (стоп)
Когда пользователь вызывает range() с одним аргументом, пользователь получит серию чисел, которая начинается с 0 и включает все целые числа до, но не включая число, которое пользователь предоставил в качестве остановки.
Визуализация диапазона Python
Пример: Демонстрация диапазона Python (стоп)
Python3
|
Выход:
0 1 2 3 4 5
Диапазон Python (Start Storp)
, когда пользователь
. 0003 range() с двумя аргументами пользователь может решить не только, где заканчивается последовательность чисел, но и где она начинается, поэтому пользователю не нужно все время начинать с 0. Пользователи могут использовать range() для генерации последовательности чисел от X до Y, используя range(X, Y).
Визуализация диапазона Python
Пример: Демонстрация диапазона Python (запуск, остановка)
Python3
|
Output:
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Диапазон Python (начало, стоп, шаг)
числа будут начинаться и останавливаться, но также и насколько велика будет разница между одним числом и следующим. Если пользователь не указывает шаг, то range() будет автоматически вести себя так, как будто шаг равен 1. В этом примере мы печатаем четные числа от 0 до 10, поэтому мы выбираем начальную точку от 0 (начало = 0 ) и остановите серию на 10 (стоп = 10). Для печати четного числа разница между одним числом и следующим должна быть 2 (шаг = 2), после указания шага мы получаем следующий вывод (0, 2, 4, 8).
Python range visualization
Example: Demonstration of Python range (start, stop, step)Python3
|
Выход:
0 2 4 6 8
Диапазон Python () с примерами
Пример 1: увеличение . пользователь хочет увеличить, тогда пользователю нужно, чтобы шаги были положительным числом.Python3
|
Вывод:
0 4 8 12 16 20 24 28Пример 2. Python range() использует отрицательный шаг число.
Python3
|
Output :
25 23 21 1917 15 13 11 9 7 5 3
Пример 3: Python range() с float
Функция Python range() не поддерживает числа с плавающей запятой. то есть пользователь не может использовать числа с плавающей запятой или нецелые числа в любом из своих аргументов. Пользователи могут использовать только целые числа.
Python3
|
Вывод:
для i в диапазоне (3.3): TypeError: объект 'float' не может быть интерпретирован как целое число
Пример 4. Конкатенация двух функций range() с использованием метода itertools chain()
Результат двух функций range() можно объединить с помощью метода chain() модуля itertools. Метод chain() используется для печати всех значений в итерируемых целях одно за другим, упомянутых в его аргументах.
Python3
Объединение результата 0 1 2 3 4 10 12 14 16 18 Пример 5. Доступ к range() со значением индексаПоследовательность чисел возвращается функцией range() в качестве объекта, к которому можно получить доступ по значению индекса. Его объект поддерживает как положительное, так и отрицательное индексирование. Python3
Вывод: Первый элемент: 0 Последний элемент: 9 Пятый элемент: 4Некоторые важные моменты, которые следует помнить о функции Python range():
Python range() Функция с примерами Python В Python, используя цикл for с Пример # Генерация чисел от 0 до 6 для я в диапазоне (6): print(i) Вывод 0 1 2 3 4 5Функция Python range() Примечание : Как видно из вывода, мы получили шесть целых чисел, начиная с 0 до 5. Если вы заметили, См. range() в Python 2
СОДЕРЖАНИЕ
|