Python

Iteratorer i Python

Iteratorer i Python
En iterator er et verdifullt verktøy for Python. Det er et objekt som brukes til å gjenta alle elementene i en samling. Iterator gir tilgang til elementene i en container, men den gjør ikke iterasjonen alene. Det fungerer som en databasemarkør og brukes til å lese platelisten en etter en. For eksempel entil'loop som gjentar verdiene til en container fungerer som en iterator. Python har mange innebygde iteratorer for iterable objekter, som lister, tupler, ordbøker osv. Uten disse iteratorene, 'verktøyfunksjoner kan brukes til å returnere andre iteratorer i Python. Denne artikkelen viser hvordan du bruker sløyfen som en iterator, tilpasset iterator, uendelig iterator og kontrollerer uendelig iterator i Python 3. Noen bruksområder forverktøyfunksjoner er også forklart i den siste delen av denne opplæringen.

Iteratormetoder

Hvert iteratorobjekt inneholder følgende to metoder.

Denne metoden brukes til å initialisere det iterable objektet. Det returnerte objektet har metoden '_ _neste_ _ ()i Python 3.

Denne metoden returnerer neste verdi av det iterable objektet. Forholdet mellom iteratoren og det iterable objektet er vist i følgende diagram.

Iterere med løkker

Det ble nevnt tidligere at 'til'loop kaller'neste ()'metoden implisitt når den gjentar et iterabelt objekt. Når en sløyfe brukes til å gjenta et iterabelt objekt,til'loop kaller'neste ()'metode implisitt og'samtidig som'loop kaller'neste ()'eller'__neste __ ()metoden eksplisitt for å lese den neste verdien av det iterable objektet. Begge typer loop fortsetter å kalle denne metoden til 'StoppIterasjon'signal genereres.

Eksempel 1: Iterere Iterable Objects med 'for' Loop

Følgende skript viser bruken av 'tilsløyfer for å gjenta fem forskjellige iterable objekter. Den første 'til'loop brukes til å gjenta strengverdien og skrive ut hvert tegn i strengen i hver iterasjon. Den andre 'til'loop brukes til å gjenta innholdet i en eksisterende tekstfil og skrive ut hver linje i filen i hver iterasjon. Den tredje 'til'loop brukes til å gjenta verdiene til en tuple. Den fjerde 'til'loop brukes til å gjenta verdiene i en liste. Den femte 'til'loop brukes til å gjenta verdiene i en ordbok.

# Iterere en streng ved hjelp av for loop
utskrift ("String Iteration using for loop")
str = "Python"
for val in str:
skrive ut (val)
# Iterere en eksisterende fil ved hjelp av for loop
skriv ut ("\ n \ nLese en fil linje for linje ved hjelp av for loop")
for linje i åpen ("test.tekst"):
skriv ut (linje, slutt = "")
# # Iterere en tuple ved hjelp av for loop
skriv ut ("\ n \ nToblet Iterasjon ved hjelp av for loop")
tup = ("Bok", "Papir", "Blyant", "Penn")
for val in tup:
skrive ut (val)
# Iterere en liste ved hjelp av for loop
skriv ut ("\ n \ nListeitering ved hjelp av for loop")
listdata = ["Designer", "Analyst", "Programmer", "Administrator"]
for val i listdata:
skrive ut (val)
# Iterere en ordbok ved hjelp av for loop
skriv ut ("\ n \ n Ordbok Iterasjon ved hjelp av for loop")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
for indeks i dictval:
utskrift ("% s oppnådde% d merker"% (indeks, dictval [indeks]))

Produksjon

Følgende utdata viser at tegnene i strengverdien; linjene til test.tekst fil; og elementene i tuplene, listen og ordboken skrives ut etter å ha kjørt skriptet.

Eksempel 2: Iterere lister med 'while' Loop

Følgende skript viser bruken av ensamtidig som'loop for iterering av en liste over data. Her, 'iter ()'metoden brukes til å initialisere det iterable objektet, og'neste ()metoden brukes til å lese neste verdi av det iterable objektet. StoppIterasjon signalet brukes til å avslutte fra det uendelige 'samtidig som' sløyfe når ingen gjenstander på listen er igjen for lesing.

# Definer en liste
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Initialiser det iterable objektet
init_iter_object = iter (listdata)
skriv ut ("Iterating List data using while loop: \ n")
# Erklære og uendelig mens løkke
mens det er sant:
prøve:
# next () -metoden brukes til å gjenta neste verdi
verdi = neste (init_iter_object)
skriv ut (verdi)
unntatt StopIteration:
# Avslutt fra sløyfen etter gjentagelse av alle verdier
gå i stykker

Produksjon

Følgende utdata viser at hver verdi av listen er skrevet ut på hver linje ved å bruke 'neste ()metode etter å ha kjørt skriptet.

Eksempel 3: Iterere en tuple med '__neste __ ()' Metode og 'mens' Loop

I det følgende skriptet, begge 'neste ()'og'__neste __ ()metodene brukes for å gjenta verdiene til en tupel. The 'iter ()'metoden brukes til å lage det iterable objektet, kalt'init_iter.'Her, den'neste ()metoden kalles to ganger for å skrive ut de to første verdiene til tupelen. Neste, en uendelig 'samtidig som'loop brukes til å gjenta de gjenværende verdiene til tuplen og'StoppIterasjon'signal brukes til å avslutte fra sløyfen, som i forrige eksempel.

# definer en tuple
animal_tuple = ('Bird', 'Lion', 'Monkey', 'Snake', 'Elephant')
print ("Verdiene til tupelen er: \ n")
# Initialiser et iteratorobjekt ved hjelp av iter ()
init_iter = iter (animal_tuple)
# iterere og skriv ut verdien ved hjelp av neste () metode
skriv ut (neste (init_iter))
skriv ut (neste (init_iter))
# Definer en uendelig mens løkke
mens det er sant:
prøve:
# iterere og skriv ut verdien ved hjelp av __next __ () -metoden
skriv ut (init_iter.__neste __ ())
unntatt StopIteration:
# Avslutt fra sløyfen etter gjentagelse av alle verdier
gå i stykker

Produksjon

Følgende utdata viser at de to første verdiene etter kjøring av skriptet, 'Fugl'og'Løve,'er trykt med'neste ()'metode, mens de andre tre verdiene,'Ape,"Slange,'og'Elefant,'er trykt med'__neste __ ()metoden.

Iterere med en tilpasset Iterator

Denne delen viser hvordan forskjellige typer tilpassede iteratorer kan implementeres ved å opprette klasser. Begge '__iter __ ()' og '__neste __ ()'metoder vil bli implementert i en klasse, og'samtidig som'loop vil bli brukt til å gjenta verdiene til det iterable objektet.  Den neste delen av denne artikkelen vil også vise hvordan du lager en uendelig tilpasset iterator og kontrollerer iterasjonen.

Eksempel 4: Bruk av en enkel tilpasset Iterator

Følgende skript lar deg beregne verdien av xn ved å bruke en tilpasset iterator uten å bruke noen innebygd funksjon av Python. Klassen heter 'x_to_the_power_n'er erklært i manuset. The '__i det__()'metode for klassen vil initialisere verdiene til x og n som vil bli brukt på tidspunktet for oppretting av objekt. The '__iter __ ()'metoden vil initialisere klassevariabelen, som vil lagre'resultatvariabel av beregningen i hver iterasjon. Verdiene av x og n blir tatt som input fra brukeren. Et objekt av klassen 'tall'er opprettet med x og n. Deretter et iterabelt objekt som heter 'iter_obj'er opprettet for å kalle'__neste __ ()'metode for n-1 ganger ved å bruke 'samtidig som'loop for å beregne verdien av xn. I hver iterasjon, verdien av x vil bli multiplisert med den forrige verdien av 'resultatvariabel. Etter å ha avsluttetsamtidig som'løkke, den'__neste __ ()'metoden vil bli kalt igjen for å skrive ut verdien av xn.

"Lag en klasse for å beregne
x til kraften n ved hjelp av iterator
"
klasse x_til_makt_n:
# Initialiser verdien av x og n
def __init __ (selv, x = 0, n = 0):
selv-.x = x
selv-.n = n
# Initier iterabelen
def __iter __ (selv):
selv-.resultat = 1
tilbake selv
# Beregn verdien i hver iterasjon
def __neste __ (selv):
hvis selv.n> = 0:
selv-.resultat * = selvtillit.x
selv-.n - = 1
tilbake selv.resultat
# Ta verdiene til x og n
x = int (input ("Angi verdien av x:"))
n = int (input ("Skriv inn verdien av n:"))
# Lag et objekt fra klassen
tall = x_to_the_power_n (x, n)
# Lag en iterabel
iter_obj = iter (tall)
prøve:
jeg = 0
mens jeg < n-1):
# Gjenopprett neste verdi ved hjelp av neste () -metoden
neste (iter_obj)
i + = 1
skriv ut ("\ n% d til effekt% d er% d"% (x, n, iter_obj.__neste __ ()))
unntatt StopIteration:
# Avslutt fra skriptet hvis ingen verdi eksisterer
skriv ut (neste (iter_obj))

Produksjon

Følgende utgang viser at 2 blir tatt som verdien av x og 4 blir tatt som verdien av n. Så, skriptet beregnet verdien av 2å være 16.

Eksempel 5: Bruk av en uendelig tilpasset Iterator

Følgende skript vil kontinuerlig skrive ut tallene som kan deles med 5 med en forsinkelse på ett sekund til brukeren trykker Ctrl + c å generere 'KeyboardInterrupt'signal. Det uendelige 'samtidig som'loop brukes her for å lage en uendelig tilpasset iterator. The 'tid'modul importeres i begynnelsen av skriptet for å bruke'søvn()'metode for å forsinke hver utgang i ett sekund. Tallet 5 er initialisert til 'num'variabel som det første delbare tallet i skriptet, og neste nummer genereres ved å legge til 5 med den forrige verdien av'numvariabel.

# Importer tidsmodul
importtid
"
Lag en klasse for å generere tallene
som kan deles med 5 kontinuerlig
"
class Number_Divisible_by_five:
# Initialiser verdien av antall
def __iter __ (selv):
selv-.num = 5
tilbake selv
# Beregn neste tall som kan deles med 5
def __neste __ (selv):
neste_nummer = selvtillit.num
tid.sove (1)
selv-.num + = 5
returner neste_num
# Lag et objekt fra klassen
Objekt = Number_Divisible_by_five ()
# Lag et iterabelt objekt
iterObject = iter (Objekt)
# Definer uendelig løkke
mens det er sant:
prøve:
# Gå for neste iterasjon
skriv ut (iterObject.__neste __ ())
unntatt KeyboardInterrupt:
skriv ut ("Ctrl + C trykkes.")
# Avslutt fra sløyfen når Ctrl + C trykkes
gå i stykker

Produksjon

Følgende utdata viser at tallet begynte å skrive ut fra 5 og kontinuerlig skrev ut de neste tallene etter hverandre med ett sekund varighet. Når brukeren trykket Ctrl + c etter utskrift av nummeret 60, meldingen 'Ctrl + C trykkes.ble skrevet ut, før manuset ble avsluttet.

Eksempel 6: Kontrollere en tilpasset uendelig Iterator

Følgende skript viser hvordan du stopper den egendefinerte uendelige iteratoren etter å ha fullført et spesifisert antall iterasjoner. The '__iter __ ()'metode for klassen vil initialisere verdiene til'n'og'resultatklassevariabler. Skriptet vil beregne kvadratene til tallene, fra og med 1, som er lagret i variabelen n, og skriv kvadratverdien av n til verdien av n er større enn 5. En uendelig mens sløyfe blir erklært her for å kalle '__neste __ ()'metode for å skrive ut kvadratverdien av n. Når verdien av n når 6, den 'StoppIterasjon'signalet vil generere for å avslutte sløyfen.

# Importer tidsmodul
importtid
"
Lag en klasse å beregne
kvadratet av tallet starter fra 1 til
verdien på tallet er mindre enn 6
"
klasse beregne_makt:
# Initialiser verdien av antall
def __iter __ (selv):
selv-.n = 1
selv-.resultat = 0
tilbake selv
# Beregn neste tall som kan deles med 5
def __neste __ (selv):
# Kontroller at verdien på n er mindre enn eller lik 5 eller ikke
hvis selv.n <= 5:
selv-.resultat = selvtillit.n ** 2
tid.sove (0.5)
selv-.n + = 1
tilbake selv.resultat
ellers:
heve StopIteration
# Lag et objekt fra klassen
Objekt = beregne_makt ()
# Lag et iterabelt objekt
iterObject = iter (Objekt)
# Definer uendelig løkke
mens det er sant:
prøve:
# Gå for neste iterasjon og skriv ut kvadratverdien
print ("Kvadraten på% d er% d"% (iterObject.n, iterObject.__neste __ ()))
unntatt StopIteration:
print ("\ nBeskyttet fra sløyfen.")
# Avslutt fra løkken
gå i stykker

Produksjon

Følgende utgang viser at den uendelige tilpassede iteratoren ble avsluttet da verdien på n ble større enn 5. Skriptet beregnet og skrev ut kvadratverdiene for tallverdiene fra 1 til 5.

Iterere med verktøy

Python har en innebygd modul som heter 'verktøy'som kan brukes til å lage en iterator for iterering av data ved hjelp av en sløyfe. Den neste delen av denne artikkelen viser hvordan du bruker tre funksjoner i denne modulen.

verktøy.telle()

De 'verktøy.forts'funksjon kan brukes med'kart()'metode for å generere sekvensiell data og med'glidelås()'metode for å legge til sekvenser ved å bruke tellingsparameteren til denne metoden. Syntaksen til denne funksjonen er gitt nedenfor.

Syntaks

verktøy.telle (start = 0, trinn = 1)

Her, den første parameteren, 'start,'brukes til å definere startverdien til sekvensen, og 0 er standardverdien for denne parameteren. Den andre parameteren, 'steg,'brukes til å angi forskjellen mellom de påfølgende tallene, og 1 er standardverdien for denne parameteren.

Eksempel 7: Bruk av count () Funksjonen til verktøyet

Følgende skript vil beregne summen fra 0 til n tall, hvor verdien av n blir tatt fra brukeren. The 'telle()'funksjon er importert fra'verktøy'i begynnelsen av skriptet. The 'min_iterator'objektet initialiseres med'telle()'funksjon, med en'start'verdi på 0 og a'stegverdi på 1. Neste, 'sum_resultvariabelen initialiseres av den første verdien av det iterable objektet. Startverdien initialiseres til variabelen Jeg og startnummeret er lagret som tegnet i variabelen, tall som skal brukes til å kombinere andre tall i hver iterasjon. Verdiene til serienumrene blir lagt til i hver iterasjon når 'neste ()metoden kalles. Når verdien av Jeg blir større enn n, skriptet avsluttes ved å vise resultatet av summen.

"Følgende skript vil beregne
summen av 0 til tallet som blir tatt som inndata.
"
# Importtelling
fra antall verktøy for import
# Oppretter en iterabel gjenstand for telling ()
my_iterator = count (start = 0, step = 1)
# Les den første verdien fra iteratoren
sum_result = neste (min_iterator)
# Ta et tallinngang for å avslutte den uendelige mens sløyfen
n = int (input ("Angi grenseverdien:"))
# Initialiser verdien av i og tall
i = sum_result
tall = f 'i'
# Erklær uendelig løkke
mens det er sant:
# Legg til tallet i hver iterasjon
sum_result + = i
i = neste (min_iterator)
# Avslutt sløyfen hvis verdien av i er mer enn n
hvis (i> n):
gå i stykker
# Legg til tallverdien som en streng med '+' symbol
tall + = "+" + f 'i'
# Skriv ut den endelige verdien
skriv ut ("% s =% d"% (tall, sum_result))

Produksjon

Følgende utgang viser at tallet 10 blir tatt som inngangen som brukes for å avslutte sløyfen etter å ha kjørt skriptet. I denne utgangen har skriptet beregnet summen fra 0 til 10 og skrevet utdataene, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.syklus()

Denne funksjonen inneholder bare ett argument, som kan være et hvilket som helst objekt. Hensikten med denne funksjonen er å gjenta verdiene til objektet etter fullført iterasjon av alle verdier. Her strenger, tupler, lister osv. kan brukes som et objekt. Det gjentatte objektet returnerer av denne funksjonen brukes til å gjenta hver verdi av objektet som skal brukes som argument ved å bruke 'neste ()metoden. Antall ganger verdiene til det iterable objektet vil gjenta vil være basert på antall gjentakelser av sløyfen. Syntaksen til denne funksjonen er gitt nedenfor.

Syntaks

verktøy.syklus (Objekt)

Eksempel 8: Bruk av syklus () Funksjonen til verktøyet

The 'tilfeldig'og'verktøy'moduler importeres ved starten av skriptet for å generere et tilfeldig tall og for å bruke'syklus()'funksjon fra'verktøy'modul for å gjenta dataene. En liste med tre tilfeldige tall brukes som argument for 'syklus()funksjon. Det iterable objektet heter 'num_list'initialiseres av returverdien til denne funksjonen. The 'tellevariabelen er initialisert til 0, og når verdien av denne variabelen blir 6, den 'samtidig som'loop vil avsluttes. Så 'samtidig som'loop vil gjentas seks ganger, og hver verdi i listen gjentas bare en gang.

# Importer tilfeldig modul
importer tilfeldig
# Importer verktøymodulen
importere verktøy
# Generer et iterabelt objekt basert på listen over tre tilfeldige tall
num_list = verktøy.syklus ([tilfeldig.randint (1,5), tilfeldig.randint (10,50), tilfeldig.randint
(100 500)])
# Initier disken
telle = 0
# Iterer løkken i 6 ganger
while (tell != 6):
print ('Det nåværende tilfeldige tallet er:' + f 'neste (num_list)')
telle + = 1

Produksjon

Følgende utgang viser at tre tilfeldige tall, 3, 17, og 185, har blitt generert som listeelementer. Sløyfen gjentas seks ganger, og disse tre verdiene gjentas for de neste gjentakelsene.

Itertools.gjenta()

'Gjenta () -funksjonen fungerer som en uendelig iterator og kan ta to argumenter. Når det andre argumentet er utelatt, fungerer funksjonen 'repeat ()' som en uendelig iterator og gjentar verdien et uendelig antall ganger. Denne funksjonen tar ikke minne for hver repetisjon. Den oppretter bare variabelen en gang i minnet og gjentar den samme variabelen et uendelig antall ganger når bare ett argument er satt for denne funksjonen. Syntaksen til denne funksjonen er gitt nedenfor.

Syntaks

verktøy.gjenta (verdi, grense)

Det første argumentet brukes til å ta verdien som skal gjentas. Det andre argumentet er valgfritt og brukes til å sette grensen for repetisjoner.

Eksempel 9: Bruk av repetisjonsfunksjonen () for verktøymodulen

The 'verktøy'modul importeres ved starten av skriptet for å bruke'gjenta()funksjon. En strengverdi vil bli tatt fra brukeren til gjentakelse, og en tallverdi vil bli tatt fra brukeren for å sette repetisjonsgrensen. Returverdien til 'gjenta()'funksjon vil da bli konvertert til en liste med'liste()'metode og lagret i'listDatavariabel. Verdiene til 'listData'vil bli skrevet ut med'til' Løkke.

# Importer verktøymodulen
importere verktøy
# Ta inngangsverdien som vil gjenta
string = input ("Skriv inn en streng:")
# Ta tallverdien du vil gjenta
repeat = int (input ("Skriv inn nummeret du vil gjenta:"))
# bruker repeat () for å gjenta strengene gjentatte ganger i en liste
listData = liste (verktøy.gjenta (streng, gjenta))
# Initialisere i
jeg = 1
print ("Listeverdiene er: \ n")
# Iterer listen ved hjelp av for loop
for val in listData:
skriv ut ("Listeelement% d =% s"% (i, val))
i + = 1

Produksjon

Følgende utgang viser at 'Python'blir tatt som strengverdi, og 3 blir tatt som tallet som brukes til å gjenta strengverdien etter at man har kjørt skriptet. Utgangen viser at strengen 'Pythongjentas tre ganger.

Konklusjon

Konseptet med iterator og bruken av forskjellige typer iteratorer i Python er prøvd å forklare med de veldig enkle eksemplene i denne artikkelen. Python-brukere kan bruke en innebygd iterator eller kan lage sin tilpassede iterator basert på kravet. Denne artikkelen vil hjelpe pythonbrukerne å vite om metodene som brukes i iteratoren, og hvordan disse metodene fungerer med en hvilken som helst loop for å lese et iterabelt objekt. Noen bruksområder for verktøy modul av python er også forklart i denne artikkelen for å vite mer detaljer om iteratoren i python.

OpenTTD Tutorial
OpenTTD er et av de mest populære forretningssimuleringsspillene der ute. I dette spillet må du lage en fantastisk transportvirksomhet. Du begynner im...
SuperTuxKart for Linux
SuperTuxKart er en flott tittel designet for å gi deg Mario Kart-opplevelsen gratis på Linux-systemet ditt. Det er ganske utfordrende og morsomt å spi...
Kjemp om Wesnoth-opplæringen
Kampen om Wesnoth er et av de mest populære open source-strategispillene du kan spille på dette tidspunktet. Ikke bare har dette spillet vært i utvikl...