Python range() Funktsioon: ujuk, loend, tsükli näited

⚡ Nutikas kokkuvõte

Python range() on sisseehitatud funktsioon, mis genereerib muutumatu täisarvude jada algusväärtusest kuni lõppväärtuseni (välja arvatud), kasutades valikulist sammu juurdekasvu juhtimiseks.

  • 🔘 süntaksit: range(start, stop, step) aktsepteerib kuni kolme täisarvulist argumenti, kus start on vaikimisi 0 ja step on vaikimisi 1.
  • ☑️ Eksklusiivne peatus: Jada peatub alati ühe väärtuse võrra enne stoppindeksit, seega range(5) annab tulemuseks väärtuse 0 kuni 4.
  • Sammude kontroll: Positiivne samm suurendab väärtusi, negatiivne samm aga loendab tagasipööratud vahemiku korral.
  • 🧪 Tüübipiirangud: Aktsepteeritakse ainult täisarve, seega ujukoma- või string-argumendid tekitavad tüübivea (TypeError).
  • 🛠️ NumPy ujukomaarvud: NumPy funktsioon arange() laiendab range() käitumist ujukomaarvudele.
  • 🤖 Tehisintellekti töövood: Masinõppe kood tugineb treeningperioodide, minipartiide ja hüperparameetrite ruudustike itereerimiseks funktsioonile range().

Python vahemik() Funktsioon

Mis on Python Vahemik?

Python range() on sisseehitatud funktsioon, mis on saadaval koos Python Rohkem kui Python (3.x) ja see annab numbrite jada, mis põhineb antud algus- ja lõppindeksil. Kui algusindeksit ei anta, loetakse indeksiks 0 ja see suurendab väärtust 1 võrra kuni stoppindeksini.

Näiteks range(5) väljastab väärtused 0, 1, 2, 3, 4. The Python range() on väga kasulik käsk ja seda kasutatakse enamasti siis, kui peate itereerima, kasutades silmuse jaoks.

Süntaks

Funktsiooni range() süntaks on näidatud allpool:

range(start, stop, step)

parameetrid

  • algus: (valikuline) Algindeks on täisarv ja kui seda pole antud, on vaikeväärtus 0.
  • peatus: Stopp-indeks määrab väärtuse, mille juures vahemikufunktsioon peab peatuma. See on vahemikufunktsiooni kohustuslik sisend. Viimane väärtus on alati 1 võrra väiksem kui stopp-väärtus.
  • samm: (valikuline) Sammu väärtus on arv, mille võrra tuleb vahemikus järgmist arvu suurendada; vaikimisi on see 1.

Tagastusväärtus

Tagastusväärtus on numbrijada antud algusest lõpuni.

Python range() Funktsioon ja ajalugu

Python range() on kasutusele võetud alates Python versioon 3; enne seda oli funktsioon xrange().

Nii range() kui ka xrange() funktsioone kasutatakse numbrijada loomiseks.

Järgnevalt on toodud erinevused funktsioonide range() ja xrange() vahel:

vahemik () xrange()
Vahemik () annab numbrite jada ja tagastab numbrite loendi. Funktsioon xrange() annab generaatoriobjekti, mis tuleb väärtuste saamiseks tsüklis for-loop.
Vahemik () tagastab loendi. xrange() tagastab generaatoriobjekti.
Meetod vahemik() kasutab rohkem mälu, kuna tagastatud loend tuleb salvestada võrreldes meetodiga xrange(). Kuna xrange() tagastab generaatori objekti, ei anna see väärtusi koheselt ja väärtuste saamiseks tuleb seda kasutada for-tsükli sees.
Mälu kasutamine on suurem, seega on koodi täitmine tohutu andmekogumiga töötamisel aeglane. Koodi täitmine on kiirem, kasutades xrange().

Vahemiku () kasutamine

See näide näitab, kuidas printida väärtusi vahemikus 0–9, kasutades vahemikus().

Vahemikus kasutatav väärtus on 10, seega väljund on 0 1 2 3 4 5 6 7 8 9.

Kuna algust ei ole antud, loetakse alguseks 0 ja viimane väärtus antakse kuni 9-ni. Viimane väärtus on alati 1 võrra väiksem kui antud väärtus, st stop-1.

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

Väljund:

0 1 2 3 4 5 6 7 8 9

Start ja stop in range() kasutamine

Koodis on algväärtus 3 ja lõppväärtus 10. Siin on algusindeks 3, seega numbrijada algab 3-st kuni lõppväärtuseni. Jada viimane väärtus on 1 võrra väiksem kui lõppväärtus, 10-1 = 9.

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

Väljund:

3 4 5 6 7 8 9

Start, stop ja step kasutamine

Algusväärtus on 3, seega numbrijada algab 3-st. Lõppväärtus on 10, seega numbrijada peatub (10-1) juures, st 9 juures. Samm on 2, seega iga jada väärtust suurendatakse 2 võrra. Kui sammu väärtust ei anta, on sammu väärtuseks vaikimisi 1.

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

Väljund:

3 5 7 9

Siiani oleme näinud, kuidas funktsioon range() annab antud stop-väärtuse jaoks suurendatud väärtuse. Proovime nüüd näidet antud vahemiku vähendatud väärtuse saamiseks.

Vahemiku väärtuste suurendamine positiivse sammuga

Parameetrit step funktsioonis range() saab kasutada väärtuste suurendamiseks või vähendamiseks. Vaikimisi on see positiivne väärtus, 1. Seega annab see alati suurendatud väärtused.

Sammu väärtus peab olema positiivne, kui soovite väljundina inkrementeeritud väärtusi.

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

Väljund:

1 6 11 16 21 26

Reverse Vahemik: väärtuste vähendamine negatiivse sammuga

Funktsiooni range() parameetrit step negatiivse väärtusega saab kasutada vähendatud väärtuste saamiseks. Allolevas näites on sammu väärtus negatiivne, seega väljundit vähendatakse antud vahemiku väärtusest.

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

Väljund:

15 14 13 12 11 10 9 8 7 6

Algväärtus on 15, stoppväärtus on 5 ja sammu väärtus on negatiivne arv, st -1. Ülaltoodud sisendite korral vähendab funktsioon range() väärtust alates 15-st kuni stoppväärtuseni, kuid siin on erinevus selles, et viimane väärtus on stopp + 1.

Ujuvate numbrite kasutamine Python vahemik ()

Töötame nüüd vahemiku () kallal, kasutades ujukoma numbreid.

Näide:

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

Ülaltoodud näites oleme kasutanud stopp-väärtust 10.5.

Väljund on:

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 annab vea, kuna funktsioon range() ei toeta ujukomaarve starti, stopi ja step'i jaoks.

For-loopi kasutamine koos Python vahemik ()

Selles näites kasutame arvumassiivi ja vaatame, kuidas massiivi for-tsükli sees range() abil itereerida.

Näide:

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

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

Väljund:

MysqlMongodb PostgreSQL Firebase

Ülaltoodud näites kasutasime stopp-väärtusena len(arr_list). For-tsükkel itereerib stopp-väärtuseni, st massiivi pikkuseni, mis on 4, kuna arr_list-is on neli elementi. Algusväärtus on 0 ja samm on 1, seega väärtused algavad 0-st ja lõpevad 3-ga, st massiivi pikkus on -1, mis tähendab, et 4 -1 = 3.

Kasutamine Python range() loendina

Selles näites näete, kuidas kasutada vahemiku väljundit loendina.

Näide:

print(list(range(10)))

Väljund:

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

Näete, et väljund on loendivormingus. Ei olnud vaja tsüklit vahemikus() ja kasutades list() meetodit, saime väljundi otse vahemikust loendivormingusse teisendada.

Märkide kasutamine vahemikus python range()

Seni oleme kasutanud täisarve vahemikus python range(). Samuti oleme näinud, et ujukoma numbreid Pythoni vahemikus ei toetata. Proovime vaadata väljundit selle kohta, mis juhtub, kui kasutame märke.

Näide:

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

Väljund:

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

See annab vea, öeldes, et stringi ei saa tõlgendada täisarvuna.

Tähestiku loendi saamiseks saate koodi kohandada ja saada soovitud väljundid allpool näidatud kujul:

Näide:

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

Väljund:

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

Vahemiku elementidele juurdepääsemine

Saate kasutada tsüklit for-loop väärtuste saamiseks vahemikust või kasutada indeksit, et pääseda juurde vahemiku() elementidele.

For-loopi kasutamine

Näide:

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

Väljund:

0
1
2
3
4
5

Indeksi kasutamine

Indeksit kasutatakse vahemikuga, et saada sellel positsioonil saadaolev väärtus. Kui vahemiku väärtus on 5, saate algusväärtuse saamiseks kasutada vahemikku (5)[0] ja järgmise väärtuse vahemikku (5)[1] jne.

Näide:

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)

Väljund:

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

List() kasutamine

See meetod prindib kõik elemendid vahemikust (). Kasutades list() tagastab see elemendid vahemikust() loendivormingus.

Näide:

print(list(range(10)))

Väljund:

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

See annab antud vahemiku loendiväljundi.

Näide: hankige paarisarvud, kasutades vahemikus ()

Funktsioon range() annab sisendiks antud vahemikust paarisarvude loendi. Funktsiooni range() parameetrid on: start on 2, stop on 20 ja step on 2, seega väärtused suurenevad 2 võrra ja tulemuseks on paarisarvud kuni stop-2-ni.

Näide:

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

Väljund:

2 4 6 8 10 12 14 16 18

Kahe vahemiku () väljundite ühendamine

Selles näites ühendame kaks range() funktsiooni itertools mooduli chain() funktsiooni abil.

Näide:

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

Väljund:

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

Vahemiku () kasutamine koos NumPyga

NumPy moodulil on funktsioon `grange()`, mis töötab ja annab sarnase väljundi nagu funktsioon `range()`. `grange()` võtab vastu samu parameetreid kui `range().

süntaksit:

arange(start, stop, step)

NumPy-ga töötamiseks järgige alltoodud samme.

Samm 1: NumPy mooduli importimine

import numpy

Kui käivitamise ajal kuvatakse tõrge, mis ütleb, et numpy moodulit ei leitud, peate mooduli installima 2. sammus näidatud viisil.

Samm 2: NumPy installimine

pip install numpy

Samm 3: NumPy abil arange() töönäide

import numpy as np

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

Väljund:

0 1 2 3 4 5 6 7 8 9

Ujukoma numbrid NumPy arange() abil

Ujukomajada pole võimalik saada funktsiooni range() abil, kuid see on võimalik funktsiooni NumPy arange() abil.

Näide:

Soovitud vahemik on 0.5 kuni 1.5. Väärtust suurendatakse 0.2 võrra.

import numpy as np

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

Väljund:

0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998

Saadud väljund on veidi veider; mõned ujukomaarvud kuvatakse 16 kümnendkoha täpsusega. See on tingitud kümnendmurdude kahendvormingus talletamise keerukusest. Vajadusel saate väärtusi ka ümardada ja piirata neid vajalike kümnendkohtadeni.

KKK

In Python 3, range() tagastab laisa, muutumatu vahemikuobjekti, mitte loendi. See genereerib numbreid nõudmisel. Mähi see loendisse (range(n)), kui on vaja tegelikku loendit. Python 2 tagastas täieliku nimekirja.

Stopp-väärtus on eksklusiivne, nii et range(len(items)) vastab selgelt nullpõhistele indeksitele. Lõpp-punkti lisamiseks lisage stopp-väärtusele üks, näiteks range(1, 11), et lugeda 1-st 10-ni.

Ei. Funktsiooni range(0, 10, 0) kutsumine tekitab vea ValueError: range() arg 3 ei tohi olla null, sest nullilähe ei saa kunagi jõuda stopp-väärtuseni ja see tsükkel oleks igavene. Kasutage selle asemel positiivset või negatiivset sammu.

range() lükkab tagasi ujukomad, aga loendi mõistmine saab täisarve skaleerida: [x * 0.5 for x in range(0, 6)] annab tulemuseks 0.0 kuni 2.5. See väldib NumPy importimist samal ajal kui samm-sammult toimingut tehakse.ping kümnendväärtuste kaudu.

Jah. Vahemikuobjekt salvestab ainult oma algus-, lõpp- ja sammuväärtused, seega range(1000000) kasutab sama väikest, konstantset mälumahtu kui range(10). Väärtused arvutatakse iteratsiooni käigus ükshaaval.

Kasutage operaatorit „in”: 5 vahemikus (0, 10) tagastab väärtuse „true”. Vahemiku objektide puhul Python teostab selle liikmesustesti kiire aritmeetika abil konstantses ajas, mitte ei skaneeri iga elementi, seega jääb see tõhusaks ka suurte vahemike korral.

Masinõppe kood kasutab range() funktsiooni treeningperioodide läbimiseks, minipartiide itereerimiseks ja hüperparameetrite ruudustike loomiseks. NumPy arange() ja linspace() laiendavad seda ujukomaarvude vahemikele õppimiskiiruse ajakavade ja läviväärtuste pühkimise jaoks, mis on tehisintellekti katsetes tavalised.

Jah. Tehisintellekti kodeerimisabilised, näiteks GitHub Copilot, täidavad automaatselt range()-põhised tsüklid kommentaari või funktsiooni nime põhjal ja agenteerimistööriistad saavad indekstsüklid ümber faktoriseerida puhtamateks enumerate()- või arusaadavusmustriteks, kuigi genereeritud piirid vajavad siiski kiiret ülevaatamist.

Võta see postitus kokku järgmiselt: