Python

Iteratorji v Pythonu

Iteratorji v Pythonu
Ponavljalec je dragoceno orodje za Python. Je predmet, ki se uporablja za ponavljanje vseh elementov zbirke. Iterator omogoča dostop do elementov vsebnika, vendar ponovitve ne opravi sam. Deluje kot kazalec baze podatkov in se uporablja za branje seznama zapisov enega za drugim. Na primer, 'zazanka, ki ponavlja vrednosti vsebnika, deluje kot iterator. Python ima veliko vgrajenih iteratorjev za ponovljive predmete, kot so seznami, nabori, slovarji itd. Brez teh iteratorjev, "itertools'funkcije lahko uporabimo za vrnitev drugih iteratorjev v Pythonu. Ta članek prikazuje, kako uporabiti zanko kot iterator, iterator po meri, neskončno iterator in nadzor neskončnega iteratorja v Python 3. Nekatere uporabeitertools'funkcije so razložene tudi v zadnjem delu te vadnice.

Iteratorske metode

Vsak predmet iteratorja vsebuje naslednji dve metodi.

Ta metoda se uporablja za inicializacijo iterable predmeta. Vrnjeni objekt ima metodo '_ _Naslednji_ _()'v Pythonu 3.

Ta metoda vrne naslednjo vrednost iterable predmeta. Razmerje med iteratorjem in iterable objektom je prikazano na naslednjem diagramu.

Ponavljanje z zankami

Prej je bilo omenjeno, da „za'zanka pokliče'Naslednji()'implicitno pri ponavljanju katerega koli iterabilnega predmeta. Ko se zanka uporablja za ponavljanje iterabilnega predmeta, seza'zanka pokliče'Naslednji()"metoda implicitno inmedtem'zanka pokliče'Naslednji()"ali"__Naslednji__()'metoda izrecno za branje naslednje vrednosti iterable predmeta. Obe vrsti zanke še naprej kličeta to metodo, doklerStopIteration'generira se signal.

Primer 1: Ponavljanje obvladljivih predmetov z zanko 'for'

Naslednji skript prikazuje uporabo 'za'zanke za ponavljanje petih različnih ponovljivih predmetov. Prvi 'zazanka se uporablja za ponavljanje vrednosti niza in tiskanje vsakega znaka niza v vsaki ponovitvi. Drugi 'zazanka se uporablja za ponovitev vsebine obstoječe besedilne datoteke in tiskanje vsake vrstice datoteke v vsaki ponovitvi. Tretji 'zazanka se uporablja za ponavljanje vrednosti zavojčka. Četrti 'zazanka se uporablja za ponovitev vrednosti na seznamu. Peti 'zazanka se uporablja za ponavljanje vrednosti v slovarju.

# Ponavljanje niza z uporabo zanke for
print ("Iteracija niza z uporabo zanke")
str = "Python"
za val v str:
tiskanje (val)
# Ponavljanje obstoječe datoteke s pomočjo zanke for
print ("\ n \ nBranje datoteke po vrsticah z uporabo zanke for")
za odprto vrstico ("test.txt "):
tiskanje (vrstica, konec = "")
# # Ponavljanje nabora z uporabo zanke for
print ("\ n \ n Iteracija tuple z uporabo zanke")
tup = ("Knjiga", "Papir", "Svinčnik", "Pero")
za val in tup:
tiskanje (val)
# Ponavljanje seznama z uporabo zanke for
print ("\ n \ nIteracija seznama z uporabo for zanke")
listdata = ["Oblikovalec", "Analitik", "Programer", "Skrbnik"]
za val v seznamu podatkov:
tiskanje (val)
# Ponavljanje slovarja z uporabo zanke for
print ("\ n \ nIteracija slovarja z uporabo zanke for")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
za kazalo v diktalu:
print ("% s doseženih% d ocen"% (indeks, dictval [kazalo]))

Izhod

Naslednji izhod kaže, da znaki vrednosti niza; vrstice preskus.txt mapa; in elementi tuplev, seznama in slovarja se natisnejo po zagonu skripta.

Primer 2: Ponavljanje seznamov z zanko 'while'

Naslednji skript prikazuje uporabo 'medtemzanka za ponavljanje seznama podatkov. Tukaj jeiter ()'metoda se uporablja za inicializacijo iterable predmeta in'Naslednji()'metoda se uporablja za branje naslednje vrednosti iterable predmeta. StopIteration signal se uporablja za zaključek iz neskončnegamedtem' zanke, ko noben element na seznamu ne ostane za branje.

# Določite seznam
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Inicializirajte predmet, ki ga je mogoče iti
init_iter_object = iter (listdata)
print ("Ponavljanje podatkov seznama z uporabo zanke while: \ n")
# Razglasite in neskončno medtem zanko
medtem ko je True:
poskusite:
Za ponavljanje naslednje vrednosti se uporablja metoda # next ()
vrednost = naslednji (init_iter_object)
tisk (vrednost)
razen StopIteration:
# Končajte iz zanke po ponovitvi vseh vrednosti
odmor

Izhod

Naslednji izhod kaže, da je bila vsaka vrednost seznama natisnjena v vsaki vrstici z uporabo 'Naslednji()'po zagonu skripta.

Primer 3: Ponavljanje nabora z metodo __next __ () 'in' while 'Loop

V naslednjem skriptu sta oba 'Naslednji()"in"__Naslednji__()'metode se uporabljajo za ponavljanje vrednosti zavojčka. "iter ()'metoda se uporablja za ustvarjanje iterable predmeta z imenom'init_iter."Tukaj,"Naslednji()'metoda se pokliče dvakrat, da natisne prvi dve vrednosti korita. Nato neskončno 'medtem'zanka se uporablja za ponovitev preostalih vrednosti korita in'StopIteration'signal se uporablja za zaključek iz zanke, kot v prejšnjem primeru.

# definirajte korito
animal_tuple = ('Ptica', 'Lev', 'Opica', 'Kača', 'Slon')
print ("Vrednosti korice so: \ n")
# Inicializirajte objekt iteratorja s pomočjo iter ()
init_iter = iter (živalska_številka)
# ponovite in natisnite vrednost z uporabo metode next ()
natisni (naslednji (init_iter))
natisni (naslednji (init_iter))
# Določite neskončno zanko while
medtem ko je True:
poskusite:
# ponovite in natisnite vrednost z uporabo metode __next __ ()
natisni (init_iter.__Naslednji__())
razen StopIteration:
# Končajte iz zanke po ponovitvi vseh vrednosti
odmor

Izhod

Naslednji izhod kaže, da sta po zagonu skripta prvi dve vrednosti, 'Ptica"in"Lev,'so natisnjeni z'Naslednji()'metoda, medtem ko ostale tri vrednosti,'Opica,"Kača,"in"Slon,'so natisnjeni z'__Naslednji__()'metoda.

Ponavljanje z Iteratorjem po meri

Ta razdelek prikazuje, kako je mogoče z ustvarjanjem razredov implementirati različne vrste iteratorjev po meri. Tako "__iter __ ()' in '__Naslednji__()'metode bodo izvedene v razredu, in'medtemzanka bo uporabljena za ponovitev vrednosti iterabilnega predmeta.  Naslednji del tega članka bo tudi prikazal, kako ustvariti neskončen iterator po meri in nadzorovati ponovitev.

Primer 4: Uporaba preprostega Iteratorja po meri

Naslednji skript vam omogoča izračun vrednosti xn z uporabo iteratorja po meri brez uporabe vgrajene funkcije Pythona. Predavanje z imenom 'x_to_the_power_n'je navedeno v skriptu. "__v__()'metoda razreda bo inicializirala vrednosti x in n ki bo uporabljen v času ustvarjanja predmeta. "__iter __ ()'metoda bo inicializirala spremenljivko razreda, ki bo shranila'rezultat'spremenljivka izračuna v vsaki ponovitvi. Vrednosti x in n bo uporabljen kot vnos uporabnika. Predmet razreda 'številke'je ustvarjen z x in n. Nato poimenovan iterable objekt 'iter_obj'je ustvarjen za klic'__Naslednji__()'metoda za n-1 krat z uporabomedtemzanka za izračun vrednosti xn. V vsaki ponovitvi je vrednost x pomnoži s prejšnjo vrednostjorezultat'spremenljivka. Po zaključkumedtem'zanka,'__Naslednji__()Za izpis vrednosti vrednosti bo znova poklicana metoda xn.

"Ustvari razred za izračun
x na moč n z uporabo iteratorja
"
razred x_to_the_power_n:
# Inicializirajte vrednost x in n
def __init __ (self, x = 0, n = 0):
sebe.x = x
sebe.n = n
# Inicializirajte iterable
def __iter __ (samo):
sebe.rezultat = 1
vrni se
# Izračunajte vrednost v vsaki ponovitvi
def __naprej __ (samo):
če jaz.n> = 0:
sebe.rezultat * = samo.x
sebe.n - = 1
vrni se.rezultat
# Vzemite vrednosti x in n
x = int (vnos ("Vnesite vrednost x:"))
n = int (vnos ("Vnesite vrednost n:"))
# Ustvari predmet razreda
številke = x_do_the_power_n (x, n)
# Ustvari iterable
iter_obj = iter (številke)
poskusite:
i = 0
medtem ko jaz < n-1):
# Pridobite naslednjo vrednost z uporabo metode next ()
naslednji (iter_obj)
i + = 1
print ("\ n% d do stopnje% d je% d"% (x, n, iter_obj.__Naslednji__()))
razen StopIteration:
# Končajte iz skripta, če nobena vrednost ne obstaja
natisni (naslednji (iter_obj))

Izhod

Naslednji izhod to kaže 2 se vzame kot vrednost x in 4 se vzame kot vrednost n. Torej, skript je izračunal vrednost 2biti 16.

Primer 5: Uporaba neskončnega Iteratorja po meri

Naslednji skript bo neprekinjeno tiskal številke, ki so deljive s 5, z zakasnitvijo ene sekunde, dokler uporabnik ne pritisne Ctrl + c ustvariti 'Prekinitev tipkovnice'signal. Neskončnomedtemzanka se tukaj uporablja za ustvarjanje neskončnega iteratorja po meri. "čas'modul je uvožen na začetku skripta za uporabo'spanje ()'metoda za zakasnitev vsakega izhoda za eno sekundo. Številka 5 se inicializira na 'številka'spremenljivka kot prva deljiva številka v skriptu, naslednja številka pa se ustvari z dodajanjem 5 s prejšnjo vrednostjo'številka'spremenljivka.

# Uvozni časovni modul
čas uvoza
"
Ustvarite razred za generiranje števil
ki so neprekinjeno deljive s 5
"
razred Number_Divisible_by_five:
# Inicializirajte vrednost num
def __iter __ (samo):
sebe.število = 5
vrni se
# Izračunaj naslednje število, ki je deljivo s 5
def __naprej __ (samo):
naslednja_številka = self.številka
čas.spanje (1)
sebe.število + = 5
vrni next_num
# Ustvari predmet razreda
Predmet = Število_Devidljivo_z_five ()
# Ustvari iterable objekt
iterObject = iter (objekt)
# Določite neskončno zanko
medtem ko je True:
poskusite:
# Pojdite na naslednjo ponovitev
print (iterObject.__Naslednji__())
razen KeyboardInterrupt:
print ("pritisnjena je Ctrl + C.")
# Končajte iz zanke, ko pritisnete Ctrl + C
odmor

Izhod

Naslednji izhod kaže, da se je številka začela tiskati od 5 in neprekinjeno tiskala naslednje številke eno za drugo v trajanju ene sekunde. Ko je uporabnik pritisnil Ctrl + c po tiskanju številke 60, sporočilo 'Pritisnite Ctrl + C.je bil natisnjen, preden je skript končan.

Primer 6: Nadzor neskončnega pretvornika po meri

Naslednji skript prikazuje, kako ustaviti neskončni iterator po meri, ko zaključite določeno število ponovitev. "__iter __ ()'metoda razreda bo inicializirala vrednosti'n"in"rezultat'spremenljivke razreda. Skripta bo izračunala kvadratke števil, začenši z 1, ki so shranjeni v spremenljivki n, in natisnite kvadratno vrednost n do vrednosti n je večje od 5. Tu je razglašena neskončna zanka while za klic '__Naslednji__()'metoda za tiskanje kvadratne vrednosti n. Ko je vrednost n doseže 6, "StopIteration'signal se bo ustvaril za zaključek zanke.

# Uvozni časovni modul
čas uvoza
"
Ustvarite razred za izračun
kvadrat števila se začne od 1 do
vrednost števila je manjša od 6
"
razred izračuna_moč:
# Inicializirajte vrednost num
def __iter __ (samo):
sebe.n = 1
sebe.rezultat = 0
vrni se
# Izračunaj naslednje število, ki je deljivo s 5
def __naprej __ (samo):
# Preverite, ali je vrednost n manjša ali enaka 5 ali ne
če jaz.n <= 5:
sebe.rezultat = jaz.n ** 2
čas.spanje (0.5)
sebe.n + = 1
vrni se.rezultat
sicer:
dvignite StopIteration
# Ustvari predmet razreda
Predmet = izračunaj_moč ()
# Ustvari iterable objekt
iterObject = iter (objekt)
# Določite neskončno zanko
medtem ko je True:
poskusite:
# Pojdite na naslednjo ponovitev in natisnite kvadratno vrednost
print ("Kvadrat% d je% d"% (iterObject.n, iterObject.__Naslednji__()))
razen StopIteration:
print ("\ nDokončano iz zanke.")
# Končajte iz zanke
odmor

Izhod

Naslednji izhod kaže, da je bil neskončni iterator po meri zaključen, ko je vrednost n postala večja od 5. Skript je izračunal in natisnil kvadratne vrednosti številskih vrednosti od 1 do 5.

Ponavljanje z itertools

Python ima vgrajen modul z imenom 'itertools', ki se lahko uporabi za ustvarjanje iteratorja za ponavljanje podatkov z uporabo zanke. Naslednji odsek tega članka prikazuje, kako uporabljati tri funkcije v tem modulu.

itertools.štetje ()

The 'itertools.nadaljevanje'funkcija se lahko uporablja s'zemljevid()'metoda za ustvarjanje zaporednih podatkov in z'zadrga ()'za dodajanje zaporedij z uporabo parametra count te metode. Sintaksa te funkcije je podana spodaj.

Sintaksa

itertools.štetje (začetek = 0, korak = 1)

Tu je prvi parameter, 'začetek,'se uporablja za določanje začetne vrednosti zaporedja in 0 je privzeta vrednost tega parametra. Drugi parameter, 'korak,'se uporablja za nastavitev razlike med zaporednimi številkami in 1 je privzeta vrednost tega parametra.

Primer 7: Uporaba funkcije count () funkcije itertools

Naslednji skript bo izračunal vsoto iz 0 do n števil, kjer je vrednost n bo odvzet uporabniku. "štetje ()'funkcija je uvožena iz'itertools'na začetku skripta. "my_iterator'objekt je inicializiran z'štetje ()'funkcija, z'začetek'vrednost 0 in a'korak'vrednost 1. Nato se prikažerezultat_vsote'spremenljivka je inicializirana s prvo vrednostjo iterable predmeta. Začetna vrednost se inicializira na spremenljivko jaz in začetna številka je shranjena kot znak v spremenljivki, številke, ki bodo uporabljene za kombiniranje drugih števil v vsaki ponovitvi. Vrednosti zaporednih števil bodo dodane v vsaki ponovitvi, ko boNaslednji()'metoda se imenuje. Ko je vrednost jaz postane večji od n, skript se bo zaključil s prikazom rezultata vsote.

"Izračuna se naslednji skript
vsota 0 številki, ki bo vzeta kot vhod.
"
# Število uvoza
iz števila uvoza itertools
# Ustvari iterabilni objekt count ()
my_iterator = štetje (začetek = 0, korak = 1)
# Preberite prvo vrednost iz iteratorja
sum_result = naslednji (my_iterator)
# Vzemite vnos številke, da končate neskončno zanko while
n = int (vnos ("Vnesite mejno vrednost:"))
# Inicializirajte vrednost i in številke
i = rezultat_vsote
številke = f 'i'
# Razglasite neskončno zanko
medtem ko je True:
# Dodajte številko v vsako ponovitev
rezultat_vsote + = i
i = naslednji (moj_iterator)
# Zaključite zanko, če je vrednost i večja od n
če (i> n):
odmor
# Številsko vrednost dodajte kot niz s simbolom '+'
številke + = "+" + f 'i'
# Natisnite končno vrednost
natisni ("% s =% d"% (številke, rezultat_vsote))

Izhod

Naslednji izhod kaže, da je število 10 je vhod, ki se uporablja za zaključek zanke po zagonu skripta. V tem izhodu je skript izračunal vsoto od 0 do 10 in natisnil izhod, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.cikel ()

Ta funkcija vsebuje samo en argument, ki je lahko kateri koli objekt. Namen te funkcije je ponoviti vrednosti predmeta po končani ponovitvi vseh vrednosti. Tukaj so nizi, nabori, seznami itd. se lahko uporablja kot objekt. Ponovljivi vrnjeni objekti te funkcije se uporabljajo za ponovitev vsake vrednosti predmeta, ki bo uporabljena kot argument z uporabo 'Naslednji()'metoda. Število ponovitev vrednosti ponovljivega predmeta bo temeljilo na številu ponovitev zanke. Sintaksa te funkcije je podana spodaj.

Sintaksa

itertools.cikel (objekt)

Primer 8: Uporaba cikla () Funkcija itertools

"naključen"in"itertools'moduli se uvozijo na začetku skripta, da ustvarijo naključno število in uporabijo'cikel ()'funkcija iz'itertools'modul za ponavljanje podatkov. Seznam treh naključnih števil se uporablja kot argumentcikel ()'funkcija. Ponovljivi objekt z imenom 'seznam_številk'se inicializira z vrnjeno vrednostjo te funkcije. "štetje'spremenljivka je inicializirana v 0, in ko vrednost te spremenljivke postane 6, "medtemzanka se bo končala. Torej 'medtemzanka se bo ponovila šestkrat in vsaka vrednost seznama se bo ponovila le enkrat.

# Uvozi naključni modul
uvoz naključno
# Uvozi modul itertools
uvoz itertools
# Ustvari iterable objekt na podlagi seznama treh naključnih števil
num_list = itertools.cikel ([naključno.randint (1,5), naključno.randint (10,50), naključno.randint
(100.500)])
# Inicializirajte števec
štetje = 0
# Šestkrat ponovite zanko
medtem ko (štetje != 6):
print ('Trenutna naključna številka je:' + f 'naslednji (seznam_številk)')
štetje + = 1

Izhod

Naslednji rezultat prikazuje tri naključne številke, 3, 17, in 185, so bili ustvarjeni kot elementi seznama. Zanka se ponovi šestkrat in te tri vrednosti se ponovijo za naslednje ponovitve.

Itertools.ponovite ()

Funkcija 'repeat ()' deluje kot neskončen iterator in ima lahko dva argumenta. Ko je drugi argument izpuščen, funkcija 'repeat ()' deluje kot neskončen ponavljalec in neskončno številokrat ponovi vrednost. Ta funkcija ne zaseda pomnilnika za vsako ponovitev. Samo enkrat ustvari spremenljivko v pomnilniku in neskončno ponavlja isto spremenljivko, ko je za to funkcijo nastavljen samo en argument. Sintaksa te funkcije je podana spodaj.

Sintaksa

itertools.ponovitev (vrednost, omejitev)

Prvi argument se uporabi za vrednost, ki se bo ponovila. Drugi argument ni obvezen in se uporablja za nastavitev meje ponovitev.

Primer 9: Uporaba funkcije repeat () funkcije modula itertools

"itertools'modul je uvožen na začetku skripta za uporabo'ponovite ()'funkcija. Uporabniku se za ponovitev vzame vrednost niza, uporabnik pa za nastavitev omejitve ponovitve. Vrnjena vrednost 'Ponovi ()'funkcija bo nato pretvorjena v seznam z'seznam ()'metoda in shranjena v'listData'spremenljivka. VrednostilistData'bo natisnjeno z'za'zanko.

# Uvozi modul itertools
uvoz itertools
# Vzemite vhodno vrednost, ki se bo ponovila
string = input ("Vnesite niz:")
# Vzemite številčno vrednost za ponovitev
repeat = int (vnos ("Vnesite številko, ki jo želite ponoviti:"))
# z uporabo repeat () za večkratno dodajanje niza na seznam
listData = seznam (itertools.ponovitev (niz, ponovitev))
# Inicializirajte i
i = 1
print ("Vrednosti seznama so: \ n")
# Ponovite seznam s pomočjo zanke for
za val v seznamuPodatki:
print ("Element seznama% d =% s"% (i, val))
i + = 1

Izhod

Naslednji rezultat kaže, da 'Python'je vzet kot vrednost niza in 3 se šteje kot številka, ki se uporablja za ponovitev vrednosti niza po zagonu skripta. Izhod kaže, da je niz 'Python'se ponovi trikrat.

Zaključek

Koncept iteratorja in uporabe različnih vrst iteratorjev v Pythonu skušajo razložiti z zelo preprostimi primeri v tem članku. Uporabniki Pythona lahko uporabljajo vgrajeni iterator ali pa lahko ustvarijo svoj iterator po meri na podlagi zahteve. Ta članek bo uporabnikom pythona pomagal vedeti o metodah, uporabljenih v iteratorju, in kako te metode delujejo s katero koli zanko za branje katerega koli iterabilnega predmeta. Nekatere uporabe itertools v tem članku so razloženi tudi moduli pythona, če želite izvedeti več podrobnosti iteratorja v pythonu.

Brezplačni in odprtokodni igralni mehanizmi za razvoj iger Linux
Ta članek bo zajemal seznam brezplačnih in odprtokodnih igralnih mehanizmov, ki jih je mogoče uporabiti za razvoj 2D in 3D iger v Linuxu. Obstaja veli...
Vadnica Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider je dvanajsti dodatek k seriji Tomb Raider - franšiza akcijsko-pustolovskih iger, ki jo je ustvaril Eidos Montreal. Kritiki i...
Kako povečati FPS v Linuxu?
FPS pomeni Število sličic na sekundo. Naloga FPS je merjenje hitrosti sličic pri predvajanju video posnetkov ali igranih predstavah. Z enostavnimi bes...