Pytonorm

Iteratorer i Python

Iteratorer i Python
En iterator är ett värdefullt verktyg för Python. Det är ett objekt som används för att itera alla element i en samling. Iterator ger tillgång till elementen i en container, men den gör inte iterationen på egen hand. Det fungerar som en databasmarkör och används för att läsa postlistan en efter en. Till exempel enför'loop som itererar värdena för en container fungerar som en iterator. Python har många inbyggda iteratorer för iterabla objekt, såsom listor, tuplar, ordböcker etc. Utan dessa iteratorer, 'itverktyg'funktioner kan användas för att returnera andra iteratorer i Python. Den här artikeln visar hur man använder slingan som en iterator, anpassad iterator, oändlig iterator och kontroll av oändlig iterator i Python 3. Vissa användningar av 'itverktygfunktioner förklaras också i den sista delen av denna handledning.

Iteratormetoder

Varje iteratorobjekt innehåller följande två metoder.

Denna metod används för att initialisera det iterabla objektet. Det returnerade objektet har metoden '_ _Nästa_ _()i Python 3.

Den här metoden returnerar nästa värde för det iterabla objektet. Förhållandet mellan iteratorn och det iterabla objektet visas i följande diagram.

Iterera med öglor

Det nämndes tidigare att 'för'loop kallar'Nästa()'metod implicit när iterera något iterabelt objekt. När en slinga används för att itera ett iterabelt objekt, kommer 'för'loop kallar'Nästa()'metod implicit och'medan'loop kallar'Nästa()'eller'__Nästa__()metod för att läsa nästa värde för det iterabla objektet. Båda typerna av loop fortsätter att kalla den här metoden tills 'StopIterationsignal genereras.

Exempel 1: Iterera Iterabla objekt med 'för' Loop

Följande skript visar användningen av 'förloopar för att itera fem olika iterabla objekt. Den första 'för'loop används för att upprepa strängvärdet och skriva ut varje tecken i strängen i varje iteration. Den andra 'för'loop används för att upprepa innehållet i en befintlig textfil och skriva ut varje rad i filen i varje iteration. Den tredje 'för'loop används för att upprepa värdena för en tupel. Den fjärde 'för'loop används för att upprepa värdena i en lista. Den femte 'för'loop används för att upprepa värdena i en ordlista.

# Iterera en sträng med hjälp av for loop
skriva ut ("Strängterering med för loop")
str = "Python"
för val in str:
tryck (val)
# Iterera en befintlig fil med hjälp av for loop
skriv ut ("\ n \ nLäs en fil rad för rad med hjälp av för loop")
för rad i öppen ("test.Text"):
skriva ut (rad, slut = "")
# # Iterera en tuple med hjälp av for loop
skriv ut ("\ n \ nToppad itering med för loop")
tup = ("Book", "Paper", "Pencil", "Pen")
för val in tup:
tryck (val)
# Iterera en lista med hjälp av for loop
skriv ut ("\ n \ nLista Iteration using for loop")
listdata = ["Designer", "Analyst", "Programmer", "Administrator"]
för val i listdata:
tryck (val)
# Iterera en ordlista med hjälp av for loop
skriva ut ("\ n \ n Ordboksåterställning med för loop")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
för index i dictval:
skriva ut ("% s uppnådde% d-märken"% (index, dictval [index]))

Produktion

Följande utdata visar att tecknen i strängvärdet; linjerna i testa.Text fil; och artiklarna i tuplarna, listan och ordlistan skrivs ut efter att manuset har körts.

Exempel 2: Iterera listor med 'while' Loop

Följande skript visar användningen av en 'medan'loop för iterering av en lista med data. Här, 'iter ()'metoden används för att initialisera det iterabla objektet och'Nästa()metoden används för att läsa nästa värde för det iterabla objektet. StopIteration signalen används för att avslutas från det oändliga 'medan' slinga när inget objekt i listan finns kvar för läsning.

# Definiera en lista
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Initiera det iterabla objektet
init_iter_object = iter (listdata)
skriv ut ("Iterating List data using while loop: \ n")
# Förklara och oändligt under loop
medan det är sant:
Prova:
Metoden # nästa () används för att upprepa nästa värde
värde = nästa (init_iter_object)
skriva ut (värde)
utom StopIteration:
# Avsluta från slingan efter att alla värden har upprepats
ha sönder

Produktion

Följande utdata visar att varje värde i listan har skrivits ut på varje rad med hjälp av 'Nästa()'-metoden efter att ha kört skriptet.

Exempel 3: Iterera en Tuple med '__nästa __ ()' Metod och 'medan' Loop

I följande skript, båda 'Nästa()'och'__Nästa__()'metoder används för att iterera värdena på en tupel. 'iter ()'metoden används för att skapa det iterabla objektet med namnet'init_iter.'Här,'Nästa()'metod kallas två gånger för att skriva ut de två första värdena i tupeln. Nästa, en oändlig 'medan'loop används för att upprepa de återstående värdena för tupeln och'StopIteration'signal används för att avslutas från slingan, som i föregående exempel.

# definiera en tuple
animal_tuple = ('Fågel', 'Lejon', 'Apa', 'Orm', 'Elefant')
print ("Värdena för tupeln är: \ n")
# Initiera ett iteratorobjekt med iter ()
init_iter = iter (animal_tuple)
# iterera och skriv ut värdet med nästa () -metod
skriv ut (nästa (init_iter))
skriv ut (nästa (init_iter))
# Definiera en oändlig stundslinga
medan det är sant:
Prova:
# iterera och skriv ut värde med __next __ () -metoden
skriva ut (init_iter.__Nästa__())
utom StopIteration:
# Avsluta från slingan efter att alla värden har upprepats
ha sönder

Produktion

Följande utdata visar att de två första värdena efter körning av skriptet, 'Fågel'och'Lejon,'är tryckta med'Nästa()'metod, medan de andra tre värdena,'Apa,"Orm,'och'Elefant,'är tryckta med'__Nästa__()metod.

Iterera med en anpassad Iterator

Det här avsnittet visar hur olika typer av anpassade iteratorer kan implementeras genom att skapa klasser. Både '__iter __ ()' och den '__Nästa__()'metoder kommer att implementeras i en klass, och'medan'loop kommer att användas för att upprepa värdena på det iterabla objektet.  Nästa del av den här artikeln visar också hur man skapar en oändlig anpassad iterator och styr iterationen.

Exempel 4: Användning av en enkel anpassad Iterator

I följande skript kan du beräkna värdet av xn genom att använda en anpassad iterator utan att använda någon inbyggd funktion av Python. Klassen heter 'x_to_the_power_n'förklaras i manuset. '__i det__()klassens metod initierar värdena för x och n som kommer att användas när objektet skapas. '__iter __ ()'metoden initialiserar klassvariabeln, som lagrar'resultat'variabel för beräkningen i varje iteration. Värdena för x och n tas som input från användaren. Ett objekt av klassen 'talär skapad med x och n. Därefter ett iterabelt objekt med namnet 'iter_obj'skapas för att kalla'__Nästa__()metod för n-1 gånger med hjälp av 'medan'loop för att beräkna värdet av xn. I varje iteration, värdet av x kommer att multipliceras med det tidigare värdet av 'resultatvariabel. Efter att ha avslutatmedan'loop, den'__Nästa__()metoden kommer att anropas igen för att skriva ut värdet på xn.

Msgstr "Skapa en klass för att beräkna
x till makten n med iterator
"
klass x_till_makt_n:
# Initiera värdet på x och n
def __init __ (själv, x = 0, n = 0):
själv.x = x
själv.n = n
# Initiera det iterabla
def __iter __ (själv):
själv.resultat = 1
återvänd själv
# Beräkna värdet i varje iteration
def __nästa __ (själv):
om själv.n> = 0:
själv.resultat * = själv.x
själv.n - = 1
återvänd själv.resultat
# Ta värdena x och n
x = int (input ("Ange värdet för x:"))
n = int (input ("Ange värdet för n:"))
# Skapa ett objekt av klassen
siffror = x_to_the_power_n (x, n)
# Skapa en iterabel
iter_obj = iter (siffror)
Prova:
i = 0
medan jag < n-1):
# Återställ nästa värde med nästa () -metod
nästa (iter_obj)
i + = 1
skriv ut ("\ n% d till effekt% d är% d"% (x, n, iter_obj.__Nästa__()))
utom StopIteration:
# Avsluta från skriptet om inget värde finns
skriv ut (nästa (iter_obj))

Produktion

Följande utdata visar att 2 tas som värdet av x och 4 tas som värdet av n. Så beräknade manuset värdet på 2att vara 16.

Exempel 5: Användning av en oändlig anpassad Iterator

Följande skript skriver kontinuerligt ut siffrorna som är delbara med 5 med en fördröjning på en sekund tills användaren trycker Ctrl + c att generera 'KeyboardInterrupt'signal. Det oändliga 'medan'loop används här för att skapa en oändlig anpassad iterator. 'tid'modulen importeras i början av skriptet för att använda'sova()metod för att fördröja varje utgång i en sekund. Siffran 5 initialiseras till 'antal'variabel som det första delbara numret i skriptet och nästa nummer genereras genom att lägga till 5 med det tidigare värdet på'antalvariabel.

# Importera tidsmodul
importtid
"
Skapa en klass för att generera siffrorna
som är delbara med 5 kontinuerligt
"
klass Number_Divisible_by_five:
# Initiera värdet på num
def __iter __ (själv):
själv.num = 5
återvänd själv
# Beräkna nästa nummer som kan delas med 5
def __nästa __ (själv):
nästa_num = själv.antal
tid.sova (1)
själv.num + = 5
returnera nästa_nummer
# Skapa ett objekt av klassen
Objekt = Number_Divisible_by_five ()
# Skapa iterabelt objekt
iterObject = iter (Object)
# Definiera oändlig slinga
medan det är sant:
Prova:
# Gå till nästa iteration
skriva ut (iterObject.__Nästa__())
utom KeyboardInterrupt:
skriv ut ("Ctrl + C trycks ned.")
# Avsluta från slingan när du trycker på Ctrl + C
ha sönder

Produktion

Följande utdata visar att numret började skriva ut från 5 och kontinuerligt skrev ut nästa nummer efter varandra med en sekundvaraktighet. När användaren tryckte Ctrl + c efter utskrift av numret 60, meddelandet 'Ctrl + C trycks ned.'' skrevs ut innan manuset avslutades.

Exempel 6: Styrning av en anpassad oändlig Iterator

Följande skript visar hur du stoppar den anpassade oändliga iteratorn efter att ha slutfört ett angivet antal iterationer. '__iter __ ()'klassens metod initialiserar värdena för'n'och'resultatklassvariabler. Manuset beräknar kvadraten på siffrorna, från och med 1, som lagras i variabeln n, och skriv ut kvadratvärdet på n tills värdet av n är större än 5. En oändlig stund-slinga förklaras här för att kalla '__Nästa__()'metod för att skriva ut kvadratvärdet på n. När värdet av n når 6, den 'StopIteration'signal kommer att generera för att avsluta slingan.

# Importera tidsmodul
importtid
"
Skapa en klass att beräkna
kvadraten för numret börjar från 1 till
värdet på numret är mindre än 6
"
klass beräkna_kraft:
# Initiera värdet på num
def __iter __ (själv):
själv.n = 1
själv.resultat = 0
återvänd själv
# Beräkna nästa nummer som kan delas med 5
def __nästa __ (själv):
# Kontrollera att värdet på n är mindre än eller lika med 5 eller inte
om själv.n <= 5:
själv.resultat = själv.n ** 2
tid.sova (0.5)
själv.n + = 1
återvänd själv.resultat
annan:
höja StopIteration
# Skapa ett objekt av klassen
Objekt = beräkna_kraft ()
# Skapa iterabelt objekt
iterObject = iter (Object)
# Definiera oändlig slinga
medan det är sant:
Prova:
# Gå till nästa iteration och skriv ut kvadratvärdet
skriv ut ("Kvadrat för% d är% d"% (iterObject.n, iterObject.__Nästa__()))
utom StopIteration:
print ("\ nTermineras från slingan.")
# Avsluta från slingan
ha sönder

Produktion

Följande utdata visar att den oändliga anpassade iteratorn avslutades när värdet på n blev större än 5. Manuset beräknade och skrev ut kvadratvärdena för talvärdena från 1 till 5.

Iterera med itverktyg

Python har en inbyggd modul som heter 'itverktyg'som kan användas för att skapa en iterator för iterering av data med en slinga. Nästa avsnitt i den här artikeln visar hur man använder tre funktioner i den här modulen.

itverktyg.räkna()

De itverktyg.forts'-funktionen kan användas med'Karta()'metod för att generera sekventiell data och med'blixtlås()'metod för att lägga till sekvenser genom att använda räknarparametern för denna metod. Syntaxen för denna funktion ges nedan.

Syntax

itverktyg.räkna (start = 0, steg = 1)

Här, den första parametern, 'Start,'används för att definiera sekvensens startvärde och 0 är standardvärdet för denna parameter. Den andra parametern, 'steg,'används för att ställa in skillnaden mellan de efterföljande siffrorna och 1 är standardvärdet för denna parameter.

Exempel 7: Användning av räkneverktygen ()

Följande skript beräknar summan från 0 till n siffror, där värdet på n tas från användaren. 'räkna()'funktion importeras från'itverktygi början av manuset. 'min_iterator'objekt initialiseras med'räkna()'funktion, med en'Start'värde på 0 och a'steg'värde på 1. Nästa, 'sum_resultvariabel initialiseras av det första värdet på det iterabla objektet. Startvärdet initialiseras till variabeln i och startnumret lagras som tecknet i variabeln, siffror som kommer att användas för att kombinera andra nummer i varje iteration. Värdena på löpnummer kommer att läggas till i varje iteration när 'Nästa()metod kallas. När värdet av i blir större än n, skriptet avslutas genom att visa resultatet av summan.

"Följande skript beräknas
summan av 0 till numret som kommer att tas som inmatning.
"
# Importantal
från itertools importantal
# Skapar ett iterabelt räkneobjekt ()
my_iterator = antal (start = 0, steg = 1)
# Läs det första värdet från iteratorn
sum_result = nästa (min_iterator)
# Ta en siffrainmatning för att avsluta det oändliga medan slingan
n = int (input ("Ange gränsvärdet:"))
# Initiera värdet på i och siffror
i = sum_result
siffror = f 'i'
# Förklara oändlig slinga
medan det är sant:
# Lägg till numret i varje iteration
sum_result + = i
i = nästa (min_iterator)
# Avsluta slingan om värdet på i är mer än n
om (i> n):
ha sönder
# Lägg till talvärdet som en sträng med '+' - symbolen
siffror + = "+" + f 'i'
# Skriv ut det slutliga värdet
skriva ut ("% s =% d"% (siffror, sum_resultat))

Produktion

Följande utdata visar att antalet 10 tas som den ingång som används för att avsluta slingan efter att man kört skriptet. I denna utdata har manuset beräknat summan från 0 till 10 och skrivit ut, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.cykel()

Den här funktionen innehåller bara ett argument, vilket kan vara vilket objekt som helst. Syftet med denna funktion är att upprepa värdena för objektet efter att ha slutfört iterationen av alla värden. Här strängar, tuplar, listor osv. kan användas som ett objekt. Den iterabla objektreturen för denna funktion används för att iterera varje värde på objektet som kommer att användas som argument genom att använda 'Nästa()metod. Antalet gånger som värdena för det iterabla objektet kommer att upprepas kommer att baseras på antalet iterationer i slingan. Syntaxen för denna funktion ges nedan.

Syntax

itverktyg.cykel (objekt)

Exempel 8: Användning av cykel () -verktygens funktion

'slumpmässig'och'itverktyg'moduler importeras i början av skriptet för att generera ett slumpmässigt nummer och för att använda'cykel()'funktion från'itverktyg'modul för att upprepa data. En lista med tre slumpmässiga nummer används som argument för 'cykel()funktion. Det iterabla objektet heter 'num_lista'initialiseras med returvärdet för denna funktion. 'räknavariabel initialiseras till 0, och när värdet på denna variabel blir 6, den 'medanslingan avslutas. Så, 'medan'loop kommer att upprepas sex gånger, och varje värde i listan upprepas bara en gång.

# Importera slumpmässig modul
importera slumpmässigt
# Importera itertools-modulen
importera verktyg
# Skapa ett iterabelt objekt baserat på listan med tre slumptal
num_list = itverktyg.cykel ([slumpmässig.randint (1,5), slumpmässig.randint (10,50), slumpmässigt.randint
(100 500)])
# Initiera räknaren
räkna = 0
# Iterera öglan i 6 gånger
medan (räkna != 6):
skriv ut ('Det aktuella slumptalet är:' + f 'nästa (num_list)')
räkna + = 1

Produktion

Följande utdata visar att tre slumptal, 3, 17, och 185, har genererats som listobjekt. Slingan upprepas sex gånger, och dessa tre värden upprepas för nästa iterationer.

Itertools.upprepa()

Funktionen 'repeat ()' fungerar som en oändlig iterator och kan ta två argument. När det andra argumentet utelämnas fungerar funktionen 'repeat ()' som en oändlig iterator och upprepar värdet ett oändligt antal gånger. Denna funktion tar inte upp minne för varje upprepning. Det skapar bara variabeln en gång i minnet och upprepar samma variabel ett oändligt antal gånger när endast ett argument är inställt för den här funktionen. Syntaxen för denna funktion ges nedan.

Syntax

itverktyg.upprepa (värde, gräns)

Det första argumentet används för att ta värdet som kommer att upprepas. Det andra argumentet är valfritt och används för att ställa in gränsen för upprepningar.

Exempel 9: Användning av upprepningsfunktionen () för verktygsmodulen

'itverktyg'modulen importeras i början av skriptet för att använda'upprepa()funktion. Ett strängvärde tas från användaren för att upprepa, och ett talvärde tas från användaren för att ställa in upprepningsgränsen. Returvärdet för 'upprepa()'' -funktionen kommer sedan att konverteras till en lista med 'lista()'metod och lagras i'listDatavariabel. Värdena för 'listData'kommer att skrivas ut med'förslinga.

# Importera itertools-modulen
importera verktyg
# Ta inmatningsvärdet som kommer att upprepas
string = input ("Ange en sträng:")
# Ta talvärdet för att upprepa
repeat = int (input ("Enter the number to repeat:"))
# använder repeat () för att lägga till strängen upprepade gånger i en lista
listData = lista (itverktyg.upprepa (sträng, upprepa))
# Initiera i
i = 1
print ("Listvärdena är: \ n")
# Iterera listan med hjälp av for loop
för val i listData:
skriva ut ("Listpost% d =% s"% (i, val))
i + = 1

Produktion

Följande utdata visar att 'Pytonorm'tas som strängvärdet, och 3 tas som det nummer som används för att upprepa strängvärdet efter att man kört skriptet. Utdata visar att strängen 'Pytonormupprepas tre gånger.

Slutsats

Begreppet iterator och användningen av olika typer av iteratorer i Python försöks förklara med de mycket enkla exemplen i den här artikeln. Python-användare kan använda en inbyggd iterator eller kan skapa sin anpassade iterator baserat på kravet. Den här artikeln hjälper pythonanvändarna att veta om metoderna som används i iteratorn och hur dessa metoder fungerar med valfri slinga för att läsa alla iterabla objekt. Vissa användningsområden för itverktyg modul av python förklaras också i den här artikeln för att veta mer detaljer om iteratorn i python.

Hur du fångar och strömmar din spelsession på Linux
Tidigare betraktades spel bara som en hobby, men med tiden såg spelindustrin en enorm tillväxt när det gäller teknik och antalet spelare. Spelpubliken...
Bästa spel att spela med handspårning
Oculus Quest introducerade nyligen den fantastiska idén om handspårning utan kontroller. Med ett ständigt ökande antal spel och aktiviteter som utför ...
Hur man visar OSD-överlägg i helskärms Linux-appar och -spel
Att spela helskärmsspel eller använda appar i distraktionsfritt helskärmsläge kan avskärma dig från relevant systeminformation som syns i en panel ell...