Python range() Funkcja: Float, Lista, For Przykłady pętli

⚡ Inteligentne podsumowanie

Python range() to wbudowana funkcja generująca niezmienną sekwencję liczb całkowitych od wartości początkowej do wartości końcowej (ale jej nie włączając), przy użyciu opcjonalnego kroku kontrolującego zwiększanie.

  • 🔘 Składnia: range(start, stop, step) akceptuje do trzech argumentów całkowitych, gdzie start ma wartość domyślną 0, a krok ma wartość domyślną 1.
  • Przystanek ekskluzywny: Sekwencja zawsze zatrzymuje się na jednej wartości przed indeksem zatrzymania, więc range(5) zwraca wartości od 0 do 4.
  • Kontrola kroków: Krok dodatni zwiększa wartości, natomiast krok ujemny odlicza wstecz w celu odwrócenia zakresu.
  • 🧪 Ograniczenia typu: Akceptowane są tylko liczby całkowite, dlatego argumenty zmiennoprzecinkowe lub ciągi znaków powodują wyjątek TypeError.
  • 🛠️. Liczby zmiennoprzecinkowe NumPy: Funkcja arange() biblioteki NumPy rozszerza zachowanie funkcji range() o sekwencje zmiennoprzecinkowe.
  • 🤖 Przepływy pracy AI: Kod uczenia maszynowego wykorzystuje funkcję range() do iterowania epok szkoleniowych, mini-partii i siatek hiperparametrów.

Python funkcja zakresu().

Czym jest Python Zakres?

Python range() to wbudowana funkcja dostępna w Python od Python (3.x) i podaje sekwencję liczb na podstawie podanego indeksu początkowego i końcowego. W przypadku braku podanego indeksu początkowego indeks jest uważany za 0 i będzie zwiększał wartość o 1 aż do indeksu końcowego.

Na przykład range(5) wyprowadzi wartości 0, 1, 2, 3, 4. Python range() to bardzo przydatne polecenie, z którego korzysta się głównie wtedy, gdy trzeba iterować za pomocą dla pętli.

Składnia

Poniżej przedstawiono składnię funkcji range():

range(start, stop, step)

Parametry

  • rozpocząć: (opcjonalnie) Indeks początkowy jest liczbą całkowitą i jeśli nie został podany, wartością domyślną jest 0.
  • przestań Indeks zatrzymania określa wartość, przy której funkcja zakresu musi się zatrzymać. Jest to obowiązkowy parametr wejściowy dla funkcji zakresu. Ostatnia wartość będzie zawsze o 1 mniejsza od wartości zatrzymania.
  • krok: (opcjonalnie) Wartość kroku to liczba, o którą należy zwiększyć kolejną liczbę w zakresie; domyślnie jest to 1.

Wartość zwracana

Wartością zwracaną jest sekwencja liczb od podanego indeksu początkowego do końcowego.

Python range() Funkcja i historia

Python range() został wprowadzony z Python wersja 3; wcześniej funkcją była xrange().

Zarówno range(), jak i xrange() służą do tworzenia sekwencji liczb.

Oto różnice między range() i xrange():

zasięg() xzakres()
Funkcja range() zwraca sekwencję liczb i listę liczb. Funkcja xrange() zwraca obiekt generatora, który należy wykonać w pętli for, aby uzyskać wartości.
Funkcja range() zwraca listę. xrange() zwraca obiekt generatora.
Metoda range() zużywa więcej pamięci, ponieważ zwrócona lista musi być przechowywana w porównaniu z metodą xrange(). Ponieważ xrange() zwraca obiekt generatora, nie zwraca on wartości od razu. Aby je uzyskać, należy użyć funkcji wewnątrz pętli for.
Większe jest zużycie pamięci, dlatego wykonywanie kodu jest wolniejsze podczas pracy na dużym zbiorze danych. Wykonanie kodu jest szybsze przy użyciu xrange().

Korzystanie z zakresu()

Ten przykład pokazuje, jak wydrukować wartości od 0 do 9 za pomocą funkcji range().

Wartość użyta w zakresie wynosi 10, więc wyjście to 0 1 2 3 4 5 6 7 8 9.

Ponieważ nie podano początku, początek uznaje się za 0, a ostatnia wartość jest podawana do 9. Ostatnia wartość jest zawsze o 1 mniejsza od podanej wartości, tj. koniec-1.

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

Wyjście:

0 1 2 3 4 5 6 7 8 9

Używanie startu i stopu w range()

W kodzie wartość początkowa to 3, a końcowa to 10. Tutaj indeks początkowy to 3, więc sekwencja liczb będzie zaczynać się od 3 aż do wartości końcowej. Ostatnia wartość w sekwencji będzie o 1 mniejsza od wartości końcowej, czyli 10 - 1 = 9.

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

Wyjście:

3 4 5 6 7 8 9

Używanie startu, stopu i kroku

Wartość początkowa wynosi 3, więc sekwencja liczb rozpocznie się od 3. Wartość końcowa wynosi 10, więc sekwencja liczb zatrzyma się na (10-1), czyli 9. Krok wynosi 2, więc każda wartość w sekwencji będzie zwiększana o 2. Jeśli wartość kroku nie zostanie podana, wartość domyślna kroku będzie równa 1.

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

Wyjście:

3 5 7 9

Do tej pory widzieliśmy, jak funkcja range() zwraca wartość inkrementowaną dla podanej wartości końcowej. Spróbujmy teraz na przykładzie uzyskać wartość dekrementowaną w podanym zakresie.

Zwiększanie wartości w zakresie za pomocą kroku dodatniego

Parametr step w funkcji range() może służyć do zwiększania lub zmniejszania wartości. Domyślnie jest to wartość dodatnia, 1. Dlatego zawsze zwróci wartości zwiększone.

Wartość kroku musi być dodatnia, jeśli chcesz, aby na wyjściu były wartości zwiększone.

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

Wyjście:

1 6 11 16 21 26

Reverse Zakres: Zmniejszanie wartości przy użyciu kroku ujemnego

Parametr step z wartością ujemną w funkcji range() może zostać użyty do uzyskania wartości dekrementowanych. W poniższym przykładzie wartość step jest ujemna, więc wynik zostanie dekrementowany od podanej wartości zakresu.

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

Wyjście:

15 14 13 12 11 10 9 8 7 6

Wartość początkowa wynosi 15, wartość końcowa to 5, a wartość kroku jest liczbą ujemną, tj. -1. Przy powyższych danych wejściowych funkcja range() będzie zmniejszać wartość od 15 w górę, aż do osiągnięcia wartości końcowej, ale tutaj różnica polega na tym, że ostatnią wartością będzie stop + 1.

Używanie liczb zmiennoprzecinkowych w Python zasięg()

Teraz zajmiemy się funkcją range() używając liczb zmiennoprzecinkowych.

Przykład:

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

W powyższym przykładzie przyjęliśmy wartość stopu równą 10.5.

Wynik to:

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 zwraca błąd, ponieważ funkcja range() nie obsługuje liczb zmiennoprzecinkowych dla parametrów start, stop i step.

Używanie pętli for z Python zasięg()

W tym przykładzie wykorzystamy tablicę liczb i pokażemy, jak iterować tablicę w pętli for za pomocą range().

Przykład:

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

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

Wyjście:

MysqlMongodb PostgreSQL Firebase

W powyższym przykładzie użyliśmy len(arr_list) jako wartości końcowej. Pętla for będzie iterować do wartości końcowej, czyli długości tablicy, która wyniesie 4, ponieważ mamy cztery elementy w arr_list. Wartość początkowa będzie wynosić 0, a krok 1, więc wartości będą zaczynać się od 0 i zatrzymywać na 3, czyli długości tablicy -1, co oznacza 4 -1 = 3.

Korzystanie z Python range() jako listę

W tym przykładzie zobaczymy, jak wykorzystać wynik z zakresu jako listę.

Przykład:

print(list(range(10)))

Wyjście:

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

Możesz zobaczyć, że wynik jest w formacie listy. Nie było potrzeby zapętlania funkcji range() i za pomocą metody list() mogliśmy bezpośrednio przekonwertować dane wyjściowe z zakresu na format listy.

Używanie znaków w zakresie Pythona()

Do tej pory używaliśmy liczb całkowitych w python range(). Widzieliśmy również, że liczby zmiennoprzecinkowe nie są obsługiwane w python range. Spróbujmy zobaczyć, co się stanie, gdy użyjemy znaków.

Przykład:

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

Wyjście:

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

Zgłasza błąd informujący, że ciągu znaków nie można interpretować jako liczby całkowitej.

Aby uzyskać listę alfabetów, możesz dostosować kod i uzyskać żądane dane wyjściowe, jak pokazano poniżej:

Przykład:

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)))

Wyjście:

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

Jak uzyskać dostęp do elementów zakresu

Możesz użyć pętli for, aby pobrać wartości z zakresu lub użyć indeksu, aby uzyskać dostęp do elementów z zakresu ().

Korzystanie z pętli for

Przykład:

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

Wyjście:

0
1
2
3
4
5

Korzystanie z indeksu

Indeks jest używany z zakresem, aby uzyskać wartość dostępną w tej pozycji. Jeśli wartość zakresu wynosi 5, aby uzyskać wartość początkową, możesz użyć zakresu (5) [0] i następnej wartości zakresu (5) [1] i tak dalej.

Przykład:

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)

Wyjście:

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

Korzystanie z listy()

Ta metoda wydrukuje wszystkie elementy z zakresu(). Używając list() zwróci elementy z zakresu() w formacie listy.

Przykład:

print(list(range(10)))

Wyjście:

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

Daje wynik listy dla podanego zakresu.

Przykład: Uzyskaj liczby parzyste za pomocą range()

Użycie funkcji range() spowoduje pobranie listy liczb parzystych z zakresu podanego jako dane wejściowe. Parametry funkcji range() to: start to 2, stop to 20 i step to 2, więc wartości będą zwiększane o 2 i będą zawierać liczby parzyste aż do stop-2.

Przykład:

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

Wyjście:

2 4 6 8 10 12 14 16 18

Łączenie wyników dwóch zakresów().

W tym przykładzie połączymy 2 funkcje range() za pomocą funkcji chain() modułu itertools.

Przykład:

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=" ")

Wyjście:

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

Używanie zakresu() z NumPy

Moduł NumPy ma funkcję arange(), która działa i zwraca podobne wyniki jak range(). Funkcja arange() przyjmuje te same parametry co range().

Składnia:

arange(start, stop, step)

Aby pracować z NumPy, wykonaj poniższe kroki.

Krok 1: Importuj moduł NumPy

import numpy

Jeżeli podczas wykonywania polecenia pojawi się błąd informujący, że moduł numpy nie został znaleziony, należy zainstalować moduł, jak pokazano w kroku 2.

Krok 2: Zainstaluj NumPy

pip install numpy

Krok 3: Działający przykład arange() przy użyciu NumPy

import numpy as np

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

Wyjście:

0 1 2 3 4 5 6 7 8 9

Liczby zmiennoprzecinkowe przy użyciu NumPy arange()

Nie można uzyskać sekwencji zmiennoprzecinkowej za pomocą funkcji range(), ale jest to możliwe za pomocą funkcji arange() NumPy.

Przykład:

Zakres, który chcemy uzyskać, to od 0.5 do 1.5. Wartość będzie zwiększana o 0.2.

import numpy as np

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

Wyjście:

0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998

Otrzymany wynik jest nieco dziwny; niektóre liczby zmiennoprzecinkowe są wyświetlane z 16 miejscami po przecinku. Wynika to ze złożoności przechowywania dziesiętnych liczb zmiennoprzecinkowych w formacie binarnym. W razie potrzeby można również zaokrąglić wartości i ograniczyć je do potrzebnych miejsc po przecinku.

FAQ

In Python 3. Funkcja range() zwraca leniwy, niezmienny obiekt zakresu, a nie listę. Generuje liczby na żądanie. Należy ją umieścić w funkcji list(range(n)), gdy wymagana jest rzeczywista lista. Python 2 zwróciło pełną listę.

Wartość końcowa jest wartością wyłączną, dzięki czemu range(len(items)) jest mapowana na indeksy zerowe. Aby uwzględnić punkt końcowy, dodaj jeden do wartości końcowej, na przykład range(1, 11), aby liczyć od 1 do 10.

Nie. Wywołanie range(0, 10, 0) powoduje błąd ValueError: argument range() 3 nie może być zerem, ponieważ krok zerowy nigdy nie osiągnąłby wartości końcowej i pętla byłaby nieskończona. Zamiast tego użyj kroku dodatniego lub ujemnego.

range() odrzuca liczby zmiennoprzecinkowe, ale comprehension listowy może skalować liczby całkowite: [x * 0.5 dla x w range(0, 6)] generuje od 0.0 do 2.5. Pozwala to uniknąć importowania NumPy podczas wykonywania kroków.ping poprzez wartości dziesiętne.

Tak. Obiekt zakresu przechowuje tylko wartości początkowe, końcowe i kroku, więc range(1000000) wykorzystuje tę samą niewielką, stałą ilość pamięci co range(10). Wartości są obliczane pojedynczo podczas iteracji.

Użyj operatora „in”: 5 w zakresie (0, 10) zwraca wartość „True”. W przypadku obiektów zakresu: Python wykonuje test przynależności za pomocą szybkich obliczeń arytmetycznych w stałym czasie, zamiast skanować każdy element, dzięki czemu pozostaje wydajny w dużych zakresach.

Kod uczenia maszynowego wykorzystuje funkcję range() do pętli po epokach treningowych, iterowania mini-partii i budowania siatek hiperparametrów. Funkcje arange() i linspace() w NumPy rozszerzają to na zakresy zmiennoprzecinkowe w celu wyznaczania harmonogramów tempa uczenia i przeszukiwania progów, powszechnych w eksperymentach z AI.

Tak. Asystenci kodowania AI, tacy jak GitHub Copilot, automatycznie uzupełniają pętle oparte na range() na podstawie komentarza lub nazwy funkcji, a także narzędzia agentowe mogą przekształcać pętle indeksowania w czystsze wzorce enumerate() lub wzorce rozumienia, choć wygenerowane ograniczenia nadal wymagają szybkiego przeglądu.

Podsumuj ten post następująco: