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

range () - это встроенная функция Python. По умолчанию функция range () возвращает последовательность чисел, начиная с 0 по умолчанию и увеличивая на 1 (по умолчанию), и останавливается перед указанным числом. Тип диапазона представляет собой неизменяемую последовательность чисел и обычно используется для выполнения цикла for определенное количество раз.

Выберите своего бойца:

класс диапазон (стоп)
класс диапазон (начало, стоп [, шаг])

Пример:

for i in range(5):
    print(i)
....................Output...............
0
1
2
3
4

В приведенном выше примере вы заметите, что указанный номер не указан. Это потому, что вы указываете циклу for перебрать все числа в диапазоне 0–5 без вывода 5. Он остановит итерацию на указанном номере. Данный номер никогда не является частью сгенерированной последовательности. Таким образом, в основном range (5) генерирует 5 значений, а range (10) генерирует 10 значений; юридические индексы для элементов последовательности длины указанного числа.

Можно позволить диапазону начинаться с другого числа или указать другое приращение (даже отрицательное; это называется «шагом»).

Пример:

#when you specify two numbers in the range function, it sees the #first number as start number i.e start from the range of this #number and include it, and the second number as end number i.e end #the range here but don't include this number.
for i in range(5, 10):
    print(i)
....................Output..................
5
6
7
8
9
............................................
#when you specify three numbers in the range function, the last #number is considered step; increment by the last number instead of #the default which is one.
for i in range(0, 10, 3):
    print(i)
......................Output...................
0
3
6
9
...............................................
#you can also do increment for negative numbers
for i in range(0, -10, -3):
    print(i)
.....................Output....................
0
-3
-6
-9
...............................................
for i in range(-10, -100, -30):
    print(i)
......................Output....................
-10
-40
-70
................................................

Если вы добавите четыре числа внутри функции диапазона ... вы сами по себе ... на самом деле, вы получите следующее:

Чтобы перебрать индексы последовательности, вы можете объединить range () и len () следующим образом:

a = ['reader', 'is', 'doing', 'amazingly', 'well']
for i in range(len(a)):
   print(i, a[i])
.....................Output......................
0 reader
1 is
2 doing
3 amazingly
4 well
..................................................
#a[i] is indexing the list a with the number i

Странная вещь происходит, если вы просто печатаете диапазон:

print(range(10))
........................Output...............
range(0, 10)
.............................................

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

Мы говорим, что такой объект является итеративным, то есть подходит в качестве цели для функций и конструкций, которые ожидают чего-то, от чего они могут получать последовательные элементы, пока запас не будет исчерпан. Мы видели, что оператор for является такой конструкцией, в то время как пример функции, которая принимает итерацию, sum():

print(sum(range(4)))  # 0 + 1 + 2 + 3
....................Output.................
6
..........................................

Преимущество типа диапазона перед обычным списком или кортежем состоит в том, что объект диапазона всегда будет занимать один и тот же (небольшой) объем памяти, независимо от размера диапазона, который он представляет (поскольку он хранит только значения начала, остановки и шага. , вычисляя отдельные элементы и поддиапазоны по мере необходимости).

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

Пример:

r = range(0, 20, 2)
#if 11 is in the range of the numbers above print True otherwise #print False
print(11 in r)
...........Output..........
False
...........................
#if 10 is in the range of the numbers above print True otherwise #print False
print(10 in r)
..................Output.......
True
...............................
#print the index of the number 10 in the range above
print(r.index(10))
..................Output.......
5
...............................
#print the number in the position of 5 in the range of values we have in the variable r
print(r[5])
..................Output..........
10
..................................
#print the numbers that is indexed from the start position to index of 5
print(r[:5])
...............Output..............
range(0, 10, 2)
...................................
#print the last number of r
print(r[-1])
...............Output................
18
.....................................

Диапазоны реализуют все общие операции с последовательностями, за исключением конкатенации и повторения (из-за того, что объекты диапазона могут представлять только последовательности, которые следуют строгому шаблону, а повторение и объединение обычно нарушают этот шаблон).

Вы также можете использовать обратную функцию с диапазоном; он выполняет операцию со спины

Пример:

for i in reversed(range(8)):
    print(i)
....................Output..............
7
6
5
4
3
2
1
0
........................................

Наконец, возможно, вам интересно, как получить список из диапазона. Вот решение:

print(list(range(10)))
.....................Output.................
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
............................................
print(list(range(1, 11)))
.....................Output.................
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
............................................
print(list(range(0, 30, 5)))
.....................Output.................
[0, 5, 10, 15, 20, 25]
............................................
print(list(range(0, 10, 3)))
.....................Output.................
[0, 3, 6, 9]
............................................
print(list(range(0, -10, -1)))
.....................Output.................
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
............................................
print(list(range(0)))
.....................Output.................
[]
............................................
print(list(range(1, 0)))
.....................Output.................
[]
............................................

О чем следует помнить

  • Аргументы конструктора диапазона должны быть целыми числами (либо встроенными int, либо любым объектом, реализующим специальный метод __index__). Если аргумент шаг опущен, по умолчанию используется 1. Если аргумент start опущен, по умолчанию используется 0. Если шаг записан как число 0, поднимается ValueError.
  • Для положительного шага содержимое диапазона r определяется формулой r[i] = start + step*i, где i >= 0 и r[i] < stop.
  • Для отрицательного шага содержимое диапазона по-прежнему определяется формулой r[i] = start + step*i, но ограничениями являются i >= 0 и r[i] > stop.
  • Объект диапазона будет пустым, если r[0] не соответствует ограничению значения. Диапазоны действительно поддерживают отрицательные индексы, но они интерпретируются как индексация от конца последовательности, определяемой положительными индексами.
  • Диапазоны, содержащие абсолютные значения больше, чем sys.maxsize, разрешены, но некоторые функции (например, len()) могут повышать OverflowError.

Спасибо, что прочитали, и я надеюсь, что из этой статьи вы узнали кое-что об одном или двух. Вы можете оставить комментарий, если у вас есть какие-либо вопросы, и со мной можно связаться по электронной почте ([email protected]).