Python range() Функция: Примери за цикъл Float, List, For

⚡ Умно обобщение

Python range() е вградена функция, която генерира непроменяема поредица от цели числа от начална стойност до, но не и крайна стойност, използвайки опционална стъпка за контрол на нарастването.

  • 🔘 Синтаксис: range(start, stop, step) приема до три целочислени аргумента, където start по подразбиране е 0, а step по подразбиране е 1.
  • ☑️ Ексклузивна спирка: Последователността винаги спира една стойност преди индекса за спиране, така че range(5) дава стойности от 0 до 4.
  • Стъпково управление: Положителна стъпка увеличава стойностите, докато отрицателна стъпка отброява назад за обратен диапазон.
  • 🧪 Ограничения на типа: Приемат се само цели числа, така че аргументите с плаваща запетая или низовете пораждат TypeError.
  • 🛠️ NumPy числа с плаваща запъвка: Функцията arange() на NumPy разширява поведението на range() до поредици от числа с плаваща запетая.
  • 🤖 Работни процеси с изкуствен интелект: Кодът за машинно обучение разчита на range(), за да итерира епохи на обучение, мини-партиди и хиперпараметрични мрежи.

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

Какво е Python Обхват?

Python range() е вградена функция, достъпна с Python от Python (3.x) и дава поредица от числа въз основа на дадения начален и стоп индекс. В случай, че началният индекс не е даден, индексът се счита за 0 и ще увеличава стойността с 1 до индекса за спиране.

Например, range(5) ще изведе стойностите 0, 1, 2, 3, 4. Python range() е много полезна команда и се използва най-вече, когато трябва да итерирате, използвайки за цикъл.

Синтаксис

Синтаксисът на функцията range() е показан по-долу:

range(start, stop, step)

параметри

  • започнете: (по избор) Началният индекс е цяло число и ако не е зададен, стойността по подразбиране е 0.
  • Спри се: Индексът на спиране определя стойността, при която функцията за диапазон трябва да спре. Той е задължителен вход за функцията за диапазон. Последната стойност винаги ще бъде с 1 по-малка от стойността на спиране.
  • стъпка: (по избор) Стойността на стъпката е числото, с което трябва да се увеличи следващото число в диапазона; по подразбиране е 1.

Върната стойност

Върнатата стойност е поредица от числа от дадения индекс за начало до край.

Python range() Функция и история

Python range() е въведен от Python версия 3; преди това, xrange() беше функцията.

Както range(), така и xrange() се използват за генериране на поредица от числа.

Следват разликите между range() и xrange():

диапазон() xrange()
Range() дава последователността от числа и връща списък от числа. Функцията xrange() дава генераторен обект, който трябва да бъде включен във for-цикъл, за да получи стойностите.
Range() връща списък. xrange() връща генераторен обект.
Методът range() използва повече памет, тъй като върнатият списък трябва да бъде съхранен в сравнение с xrange(). Тъй като xrange() връща обект-генератор, той не дава стойности мигновено и трябва да се използва във for-loop, за да се получат стойностите.
Използването на памет е по-голямо, следователно изпълнението на кода е бавно при работа с огромен набор от данни. Изпълнението на кода е по-бързо с помощта на xrange().

Използване на range()

Този пример показва как да отпечатате стойностите от 0-9 с помощта на range().

Стойността, използвана в диапазона, е 10, така че изходът е 0 1 2 3 4 5 6 7 8 9.

Тъй като началната стойност не е дадена, тя се счита за 0 и последната стойност се дава до 9. Последната стойност винаги е с 1 по-малка от дадената стойност, т.е. стоп-1.

for i in range(10):
    print(i, end =" ")

Изход:

0 1 2 3 4 5 6 7 8 9

Използване на старт и стоп в range()

В кода началната стойност е 3, а крайната стойност е 10. Тук началният индекс е 3, така че поредицата от числа ще започва от 3 до крайната стойност. Последната стойност в поредицата ще бъде с 1 по-малка от крайната стойност, 10-1 = 9.

for i in range(3, 10):
    print(i, end =" ")

Изход:

3 4 5 6 7 8 9

Използване на старт, стоп и стъпка

Началната стойност е 3, така че поредицата от числа ще започва от 3. Крайната стойност е 10, така че поредицата от числа ще спре на (10-1), т.е. 9. Стъпката е 2, така че всяка стойност в поредицата ще бъде увеличена с 2. Ако стойността на стъпката не е зададена, стойността по подразбиране за стъпка е 1.

for i in range(3, 10, 2):
    print(i, end =" ")

Изход:

3 5 7 9

Дотук видяхме как функцията range() дава увеличената стойност за дадената стоп стойност. Нека сега опитаме пример за получаване на намалената стойност в дадения диапазон.

Увеличаване на стойностите в диапазона с положителна стъпка

Параметърът step в range() може да се използва за увеличаване или намаляване на стойностите. По подразбиране е положителна стойност, 1. Така че винаги ще дава увеличени стойности.

Стойността на стъпката трябва да е положителна, в случай че искате увеличени стойности като изход.

for i in range(1, 30, 5):
    print(i, end =" ")

Изход:

1 6 11 16 21 26

Reverse Диапазон: Намаляване на стойностите с отрицателна стъпка

Параметърът step с отрицателна стойност в range() може да се използва за получаване на намалени стойности. В примера по-долу стойността на step е отрицателна, така че изходът ще бъде намален от дадената стойност на диапазона.

for i in range(15, 5, -1):
    print(i, end =" ")

Изход:

15 14 13 12 11 10 9 8 7 6

Началната стойност е 15, крайната стойност е 5, а стойността на стъпката е отрицателно число, т.е. -1. С горните входни данни, функцията range() ще намалява стойността от 15 нататък, докато достигне крайната стойност, но тук разликата е, че последната стойност ще бъде stop + 1.

Използване на плаващи числа в Python диапазон()

Нека сега да поработим върху range() с помощта на числа с плаваща запетая.

Пример:

for i in range(10.5):
    print(i, end =" ")

В горния пример използвахме стоп стойност 10.5.

Резултатът е:

Traceback (most recent call last):
  File "python_range.py", line 1, in <module>
    for i in range(10.5):
TypeError: 'float' object cannot be interpreted as an integer

Python дава грешка, тъй като функцията range() не поддържа числа с плаваща запетая за начало, край и стъпка.

Използване на for-цикъл с Python диапазон()

В този пример ще използваме масив от числа и ще видим как да итерираме масива във for-loop, използвайки range().

Пример:

arr_list = ['Mysql', 'Mongodb', 'PostgreSQL', 'Firebase']

for i in range(len(arr_list)):
    print(arr_list[i], end =" ")

Изход:

MysqlMongodb PostgreSQL Firebase

В горния пример използвахме len(arr_list) като стоп стойност. Цикълът for ще итерира до стоп стойността, т.е. дължината на масива, която ще бъде 4, тъй като имаме четири елемента в arr_list. Началната стойност ще бъде 0, а стъпката ще бъде 1, така че стойностите ще започват от 0 и ще спират на 3, т.е. дължина на масива -1, което означава 4 -1 = 3.

Използването на Python range() като списък

В този пример ще видите как да използвате изхода от диапазон като списък.

Пример:

print(list(range(10)))

Изход:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Можете да видите, че изходът е формат на списък. Не беше необходимо да правим цикъл на range() и използвайки метода list() можехме директно да конвертираме изхода от диапазон във формат на списък.

Използване на знаци в python range()

Досега сме използвали цели числа в python range(). Видяхме също, че числата с плаваща запетая не се поддържат в диапазона на Python. Нека опитаме да видим резултата какво се случва, когато използваме знаци.

Пример:

for c in range ('z'):
        print(c, end =" ")

Изход:

Traceback (most recent call last):
  File "python_range.py", line 1, in <module>
    for c in range ('z'):
TypeError: 'str' object cannot be interpreted as an integer

Извежда грешка, казвайки, че низ не може да се интерпретира като цяло число.

За да получите списъка с азбуки, можете да персонализирате кода и да получите желаните резултати, както е показано по-долу:

Пример:

def get_alphabets(startletter, stopletter, step):
    for c in range(ord(startletter.lower()), ord(stopletter.lower()), step):
        yield chr(c)

print(list(get_alphabets("a", "h", 1)))

Изход:

['a', 'b', 'c', 'd', 'e', 'f', 'g']

Как да получите достъп до елементите на диапазона

Можете да използвате for-цикъл, за да получите стойностите от диапазона или да използвате индекса за достъп до елементите от диапазон().

Използване на for-цикъл

Пример:

for i in range(6):
    print(i)

Изход:

0
1
2
3
4
5

Използване на индекс

Индексът се използва с диапазон, за да се получи наличната стойност в тази позиция. Ако стойността на диапазона е 5, за да получите началната стойност, можете да използвате range(5)[0] и следващата стойност range(5)[1] и т.н.

Пример:

startvalue = range(5)[0] 
print("The first element in range is = ", startvalue) 

secondvalue = range(5)[1] 
print("The second element in range is = ", secondvalue) 

lastvalue = range(5)[-1]
print("The first element in range is = ", lastvalue)

Изход:

The first element in range is =  0
The second element in range is =  1
The first element in range is =  4

Използване на list()

Този метод ще отпечата всички елементи от range(). Използвайки list(), той ще върне елементите от range() във формат на списък.

Пример:

print(list(range(10)))

Изход:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Той дава изходния списък за дадения диапазон.

Пример: Вземете четни числа с помощта на range()

Използването на range() ще получи списъка с четните числа в диапазона, даден като вход. Параметрите за range() са: start е 2, stop е 20 и step е 2, така че стойностите ще бъдат увеличени с 2 и ще дават четни числа до stop-2.

Пример:

for i in range(2, 20, 2):
    print(i, end =" ")

Изход:

2 4 6 8 10 12 14 16 18

Обединяване на два диапазона() изходи

В този пример ще обединим 2 функции range() с помощта на функцията chain() на модула itertools.

Пример:

from itertools import chain

print("Merging two range into one")
frange =chain(range(10), range(10, 20, 1))
for i in frange:
    print(i, end=" ")

Изход:

Merging two range into one
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Използване на range() с NumPy

Модулът NumPy има функция arange(), която работи и дава подобен резултат като range(). Arange() приема същите параметри като range().

Синтаксис:

arange(start, stop, step)

За да работите с NumPy, следвайте стъпките, дадени по-долу.

Стъпка : Импортиране на модул NumPy

import numpy

В случай, че по време на изпълнение се появи грешка, че модулът numpy не е намерен, трябва да инсталирате модула, както е показано в стъпка 2.

Стъпка Инсталиране на NumPy

pip install numpy

Стъпка : Работещ пример за arange() с помощта на NumPy

import numpy as np

for  i in np.arange(10):
   print(i, end =" ")  

Изход:

0 1 2 3 4 5 6 7 8 9

Числа с плаваща запетая с помощта на NumPy arange()

Не е възможно да се получи поредицата с плаваща запетая, използвайки range(), но е възможно, използвайки NumPy arange().

Пример:

Желаният диапазон е от 0.5 до 1.5. Стойността ще бъде увеличена с 0.2.

import numpy as np

for  i in np.arange(0.5, 1.5, 0.2):
   print(i, end =" ")  

Изход:

0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998

Резултатът, който получаваме, е малко странен; някои от числата с плаваща запетая са показани с 16 знака след десетичната запетая. Това се случва поради сложността на съхраняването на десетични числа с плаваща запетая в двоичен формат. Можете също така да закръглите стойностите, ако е необходимо, и да ги ограничите до необходимия брой знака след десетичната запетая.

Въпроси и Отговори

In Python 3, range() връща мързелив, непроменлив обект тип range, а не списък. Той генерира числа при поискване. Увийте го в list(range(n)), когато е необходим действителен списък. Python 2 върнаха пълен списък.

Стойността на стоп е изключваща, така че range(len(items)) се съпоставя чисто с индекси, базирани на нула. За да включите крайната точка, добавете единица към стоп, например range(1, 11), за да броите от 1 до 10.

Не. Извикването на range(0, 10, 0) поражда ValueError: range() arg 3 не трябва да е нула, защото нулева стъпка никога не би могла да достигне стоп стойността и би се повтаряла безкрайно. Използвайте вместо това положителна или отрицателна стъпка.

range() отхвърля числа с плаваща запетая, но списъчното разбиране може да мащабира цели числа: [x * 0.5 for x in range(0, 6)] произвежда от 0.0 до 2.5. Това избягва импортирането на NumPy, докато все още се изпълнява стъпкаping чрез десетични стойности.

Да. Обектът range съхранява само началните, крайните и стъпката си, така че range(1000000) използва същото малко, постоянно количество памет като range(10). Стойностите се изчисляват една по една по време на итерацията.

Използвайте оператора in: 5 in range(0, 10) връща True. За обекти тип range, Python извършва този тест за принадлежност с бърза аритметика за постоянно време, вместо да сканира всеки елемент, така че остава ефективен в огромни диапазони.

Кодът за машинно обучение използва range(), за да обхожда епохи на обучение, да итерира мини-партиди и да изгражда мрежи с хиперпараметри. NumPy arange() и linspace() разширяват това до диапазони от числа с плаваща запетая за графици за скорост на обучение и прагови промени, често срещани в експериментите с изкуствен интелект.

Да. Асистенти за AI кодиране, като например GitHub Copilot, базирани на цикли за автоматично довършване range() от коментар или име на функция, и агентни инструменти могат да рефакторират индексни цикли в по-чисти enumerate() или comprehension модели, въпреки че генерираните граници все още се нуждаят от бърз преглед.

Обобщете тази публикация с: