Python

Iteratorer i Python

Iteratorer i Python
En iterator er et værdifuldt værktøj til Python. Det er et objekt, der bruges til at gentage alle elementerne i en samling. Iterator giver adgang til elementerne i en container, men den udfører ikke iteration alene. Det fungerer som en databasemarkør og bruges til at læse postlisten en efter en. For eksempel en 'til'loop, der gentager værdierne for en container, fungerer som en iterator. Python har mange indbyggede iteratorer til iterable objekter, såsom lister, tupler, ordbøger osv. Uden disse iteratorer, 'itværktøjer'funktioner kan bruges til at returnere andre iteratorer i Python. Denne artikel viser, hvordan man bruger sløjfen som en iterator, brugerdefineret iterator, uendelig iterator og styrer uendelig iterator i Python 3. Nogle anvendelser af 'itværktøjer'funktioner forklares også i den sidste del af denne vejledning.

Iteratormetoder

Hvert iteratorobjekt indeholder følgende to metoder.

Denne metode bruges til at initialisere det iterable objekt. Det returnerede objekt har metoden '_ _Næste_ _()i Python 3.

Denne metode returnerer den næste værdi af det iterable objekt. Forholdet mellem iteratoren og det iterable objekt er vist i det følgende diagram.

Itererer med sløjfer

Det blev nævnt tidligere, at 'til'loop kalder'Næste()'metode implicit, når det gentager et iterabelt objekt. Når en sløjfe bruges til at gentage en iterabel genstand,til'loop kalder'Næste()'metode implicit og'mens'loop kalder'Næste()'eller'__Næste__()'metode eksplicit at læse den næste værdi af det iterable objekt. Begge typer sløjfe fortsætter med at kalde denne metode indtil 'StopIteration'signalet genereres.

Eksempel 1: Iterering af gentagelige objekter med 'for' Loop

Følgende script viser brugen af ​​'tilsløjfer til iterering af fem forskellige iterable objekter. Den første 'til'loop bruges til at gentage strengværdien og udskrive hvert tegn i strengen i hver iteration. Sekundet 'til'loop bruges til at gentage indholdet af en eksisterende tekstfil og udskrive hver linje i filen i hver iteration. Den tredje 'til'loop bruges til at gentage værdierne af en tuple. Den fjerde 'til'loop bruges til at gentage værdierne i en liste. Den femte 'til'loop bruges til at gentage værdierne i en ordbog.

# Iterering af en streng ved hjælp af for loop
print ("Strengteration ved hjælp af loop")
str = "Python"
for val in str:
print (val)
# Iterering af en eksisterende fil ved hjælp af for loop
print ("\ n \ nLæse en fil linje for linje ved hjælp af for loop")
for linje i åben ("test.txt "):
print (line, end = "")
# # Iterering af en tuple ved hjælp af for loop
udskriv ("\ n \ nToblet gentagelse ved hjælp af for loop")
tup = ("Bog", "Papir", "Blyant", "Pen")
til val in tup:
print (val)
# Iterering af en liste ved hjælp af for loop
udskriv ("\ n \ nListeteration ved hjælp af for loop")
listdata = ["Designer", "Analyst", "Programmer", "Administrator"]
for val i listdata:
print (val)
# Iterering af en ordbog ved hjælp af for loop
udskriv ("\ n \ n Ordbog Iteration ved hjælp af for loop")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
til indeks i dictval:
udskriv ("% s opnåede% d mærker"% (indeks, dictval [indeks]))

Produktion

Følgende output viser, at tegnene i strengværdien; linjerne i prøve.txt fil; og emnerne i tuplerne, listen og ordbogen udskrives efter kørsel af scriptet.

Eksempel 2: Iterering af lister med 'while' Loop

Følgende script viser brugen af ​​en 'mens'loop til iterering af en liste med data. Her er 'iter ()'metode bruges til at initialisere det iterable objekt, og'Næste()'metode bruges til at læse den næste værdi af det iterable objekt. StopIteration signal bruges til at afslutte fra det uendelige 'mens' loop, når der ikke er noget punkt på listen tilbage til læsning.

# Definer en liste
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Initialiser det iterable objekt
init_iter_object = iter (listdata)
udskriv ("Iterating List data using while loop: \ n")
# Erklær og uendelig mens loop
mens det er sandt:
prøve:
# næste () metode bruges til at gentage næste værdi
værdi = næste (init_iter_object)
print (værdi)
undtagen StopIteration:
# Afslut fra sløjfen efter iterering af alle værdier
pause

Produktion

Følgende output viser, at hver værdi på listen er blevet udskrevet i hver linje ved hjælp af 'Næste()'metode efter kørsel af scriptet.

Eksempel 3: Iteration a Tuple with '__next __ ()' Method and 'while' Loop

I det følgende script, begge 'Næste()'og'__Næste__()'metoder bruges til at gentage værdierne af en tuple. Det 'iter ()'metode bruges til at oprette det iterable objekt med navnet'init_iter.'Her, den'Næste()'metode kaldes to gange for at udskrive de to første værdier i tuplen. Dernæst en uendelig 'mens'loop bruges til at gentage de resterende værdier af tuplen og'StopIteration'signal bruges til at afslutte fra sløjfen, som i det foregående eksempel.

# definer en tuple
animal_tuple = ('Fugl', 'Løve', 'Abe', 'Slange', 'Elefant')
print ("Værdierne for tuplen er: \ n")
# Initialiser et iteratorobjekt ved hjælp af iter ()
init_iter = iter (animal_tuple)
# iterér og udskriv værdien ved hjælp af næste () metode
udskriv (næste (init_iter))
udskriv (næste (init_iter))
# Definer en uendelig mens løkke
mens det er sandt:
prøve:
# gentag og udskriv værdien ved hjælp af __next __ () -metoden
udskrive (init_iter.__Næste__())
undtagen StopIteration:
# Afslut fra sløjfen efter iterering af alle værdier
pause

Produktion

Følgende output viser, at de to første værdier efter kørsel af scriptet, 'Fugl'og'Løve,'er trykt med'Næste()'metode, mens de andre tre værdier,'Abe,"Slange,'og'Elefant,'er trykt med'__Næste__()'metode.

Iterering med en brugerdefineret Iterator

Dette afsnit viser, hvordan forskellige typer tilpassede iteratorer kan implementeres ved at oprette klasser. Både '__iter __ ()' og '__Næste__()'metoder vil blive implementeret i en klasse, og'mens'loop bruges til at gentage værdierne for det iterable objekt.  Den næste del af denne artikel viser også, hvordan man opretter en uendelig brugerdefineret iterator og styrer iterationen.

Eksempel 4: Brug af en simpel brugerdefineret Iterator

Følgende script giver dig mulighed for at beregne værdien af xn ved at bruge en brugerdefineret iterator uden at bruge nogen indbygget funktion af Python. Klassen ved navn 'x_to_the_power_n'erklæres i scriptet. Det '__i det__()'metode i klassen initialiserer værdierne for x og n der vil blive brugt på tidspunktet for oprettelse af objekt. Det '__iter __ ()'metoden initialiserer klassevariablen, som gemmer'resultat'variabel af beregningen i hver iteration. Værdierne af x og n vil blive taget som input fra brugeren. Et objekt i klassen 'numre'er oprettet med x og n. Dernæst et iterabelt objekt med navnet 'iter_obj'er skabt til at kalde'__Næste__()'metode til n-1 gange ved hjælp af 'mens'loop for at beregne værdien af xn. I hver iteration er værdien af x ganges med den tidligere værdi af 'resultatvariabel. Efter afslutning af 'mens'løkke, den'__Næste__()'metode kaldes igen for at udskrive værdien af xn.

"Opret en klasse for at beregne
x til magten n ved hjælp af iterator
"
klasse x_to_the_power_n:
# Initialiser værdien af ​​x og n
def __init __ (selv, x = 0, n = 0):
selv.x = x
selv.n = n
# Initialer iterablen
def __iter __ (selv):
selv.resultat = 1
vende tilbage selv
# Beregn værdien i hver iteration
def __næste __ (selv):
hvis selv.n> = 0:
selv.resultat * = selv.x
selv.n - = 1
vende tilbage selv.resultat
# Tag værdierne x og n
x = int (input ("Indtast værdien af ​​x:"))
n = int (input ("Indtast værdien af ​​n:"))
# Opret et objekt fra klassen
tal = x_to_the_power_n (x, n)
# Opret en iterabel
iter_obj = iter (tal)
prøve:
i = 0
mens jeg < n-1):
# Gendan den næste værdi ved hjælp af næste () -metoden
næste (iter_obj)
i + = 1
udskriv ("\ n% d til magt% d er% d"% (x, n, iter_obj.__Næste__()))
undtagen StopIteration:
# Afslut fra scriptet, hvis der ikke findes nogen værdi
udskriv (næste (iter_obj))

Produktion

Følgende output viser det 2 tages som værdien af x og 4 tages som værdien af n. Så, scriptet beregnet værdien af 2at være 16.

Eksempel 5: Brug af en uendelig brugerdefineret Iterator

Det følgende script udskriver løbende de numre, der kan deles med 5 med en forsinkelse på et sekund, indtil brugeren trykker på Ctrl + c at generere 'KeyboardInterrupt'signal. Det uendelige 'mens'loop bruges her til at oprette en uendelig brugerdefineret iterator. Det 'tid'modul importeres i begyndelsen af ​​scriptet for at bruge'søvn()'metode til at forsinke hvert output i et sekund. Nummeret 5 initialiseres til 'antal'variabel som det første delelige nummer i scriptet, og det næste nummer genereres ved at tilføje 5 med den tidligere værdi af'antalvariabel.

# Importer tidsmodul
importtid
"
Opret en klasse for at generere numrene
som kontinuerligt kan deles med 5
"
klasse Number_Divisible_by_five:
# Initialiser værdien af ​​num
def __iter __ (selv):
selv.num = 5
vende tilbage selv
# Beregn det næste tal, der kan deles med 5
def __næste __ (selv):
next_num = selv.antal
tid.sove (1)
selv.tal + = 5
returner næste_nummer
# Opret et objekt fra klassen
Objekt = Number_Divisible_by_five ()
# Opret iterabelt objekt
iterObject = iter (Objekt)
# Definer uendelig løkke
mens det er sandt:
prøve:
# Gå til næste iteration
udskrive (iterObject.__Næste__())
undtagen KeyboardInterrupt:
print ("Ctrl + C trykkes.")
# Afslut fra sløjfen, når der trykkes på Ctrl + C
pause

Produktion

Følgende output viser, at antallet begyndte at udskrive fra 5 og løbende udskrev de næste numre efter hinanden med et varighed på et sekund. Når brugeren trykkede Ctrl + c efter udskrivning af nummeret 60, beskeden 'Ctrl + C trykkes.blev udskrevet, inden manuskriptet blev afsluttet.

Eksempel 6: Styring af en brugerdefineret uendelig Iterator

Det følgende script viser, hvordan man stopper den brugerdefinerede uendelige iterator, når man har gennemført et specificeret antal iterationer. Det '__iter __ ()'metode i klassen initialiserer værdierne for'n'og'resultat'klasse variabler. Scriptet beregner kvadraterne på tallene fra og med 1, der er gemt i variablen n, og udskriv kvadratværdien af n indtil værdien af n er større end 5. En uendelig mens løkke er erklæret her for at kalde '__Næste__()'metode til at udskrive kvadratværdien af n. Når værdien af n når 6, det 'StopIteration'signal genereres for at afslutte sløjfen.

# Importer tidsmodul
importtid
"
Opret en klasse til beregning
kvadratet af nummeret starter fra 1 til
værdien af ​​tallet er mindre end 6
"
klasse beregne_effekt:
# Initialiser værdien af ​​num
def __iter __ (selv):
selv.n = 1
selv.resultat = 0
vende tilbage selv
# Beregn det næste tal, der kan deles med 5
def __næste __ (selv):
# Kontroller, at værdien af ​​n er mindre end eller lig med 5 eller ej
hvis selv.n <= 5:
selv.resultat = selv.n ** 2
tid.sove (0.5)
selv.n + = 1
vende tilbage selv.resultat
andet:
hæve StopIteration
# Opret et objekt fra klassen
Objekt = beregne_kraft ()
# Opret iterabelt objekt
iterObject = iter (Objekt)
# Definer uendelig løkke
mens det er sandt:
prøve:
# Gå til den næste iteration og udskriv kvadratværdien
print ("Kvadraten på% d er% d"% (iterObject.n, iterObject.__Næste__()))
undtagen StopIteration:
print ("\ nTermineret fra sløjfen.")
# Afslut fra sløjfen
pause

Produktion

Følgende output viser, at den uendelige brugerdefinerede iterator blev afsluttet, når værdien af ​​n blev større end 5. Scriptet beregnet og udskrev firkantværdierne for talværdierne fra 1 til 5.

Iterere med itværktøjer

Python har et indbygget modul med navnet 'itværktøjer'der kan bruges til at oprette en iterator til iterering af data ved hjælp af en loop. Det næste afsnit i denne artikel viser, hvordan du bruger tre funktioner i dette modul.

itværktøjer.tælle()

Det 'værktøjer.fortsat'funktion kan bruges med'kort()'metode til at generere sekventielle data og med'lynlås ()'metode til at tilføje sekvenser ved hjælp af optællingsparameteren for denne metode. Syntaksen for denne funktion er angivet nedenfor.

Syntaks

itværktøjer.tælle (start = 0, trin = 1)

Her er den første parameter, 'Start,'bruges til at definere startværdien af ​​sekvensen, og 0 er standardværdien for denne parameter. Den anden parameter, 'trin,'bruges til at indstille forskellen mellem de på hinanden følgende tal, og 1 er standardværdien for denne parameter.

Eksempel 7: Brug af tæller () Funktion for itværktøjer

Det følgende script beregner summen fra 0 til n tal, hvor værdien af n vil blive taget fra brugeren. Det 'tælle()'funktion importeres fra'itværktøjer'i begyndelsen af ​​scriptet. Det 'min_iterator'objekt initialiseres med'tælle()'funktion, med en'Start'værdi på 0 og a'trin'værdi på 1. Dernæstsum_result'variabel initialiseres med den første værdi af det iterable objekt. Startværdien initialiseres til variablen jeg og startnummeret er gemt som tegnet i variablen, tal, der vil blive brugt til at kombinere andre tal i hver iteration. Værdierne for de løbende numre tilføjes i hver iteration, når 'Næste()'metode kaldes. Når værdien af jeg bliver større end n, scriptet afsluttes ved at vise resultatet af summen.

"Det følgende script beregner
summen af ​​0 til det antal, der tages som input.
"
# Importantal
fra itertools importantal
# Opretter et gentageligt objekt med optælling ()
my_iterator = antal (start = 0, trin = 1)
# Læs den første værdi fra iteratoren
sum_result = næste (min_iterator)
# Tag et talinput for at afslutte det uendelige mens loop
n = int (input ("Indtast grænseværdien:"))
# Initialiser værdien af ​​i og tal
i = sum_result
tal = f 'i'
# Erklær uendelig løkke
mens det er sandt:
# Tilføj nummeret i hver iteration
sum_result + = i
i = næste (min_iterator)
# Afslut sløjfen, hvis værdien af ​​i er mere end n
hvis (i> n):
pause
# Tilføj talværdien som en streng med '+' symbolet
tal + = "+" + f 'i'
# Udskriv den endelige værdi
udskriv ("% s =% d"% (tal, sum_result))

Produktion

Følgende output viser, at antallet 10 tages som det input, der bruges til at afslutte loop efter kørsel af scriptet. I denne output har scriptet beregnet summen fra 0 til 10 og udskrevet output, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.cyklus()

Denne funktion indeholder kun et argument, som kan være et hvilket som helst objekt. Formålet med denne funktion er at gentage værdierne for objektet efter at have afsluttet iteration af alle værdier. Her strenge, tupler, lister osv. kan bruges som et objekt. Den iterable objektretur for denne funktion bruges til at gentage hver værdi af objektet, der skal bruges som et argument ved hjælp af 'Næste()'metode. Antallet af gange, som værdierne for det iterable objekt vil gentage, vil være baseret på antallet af iterationer af sløjfen. Syntaksen for denne funktion er angivet nedenfor.

Syntaks

itværktøjer.cyklus (objekt)

Eksempel 8: Brug af cykel () -værktøjets funktion

Det 'tilfældig'og'itværktøjer'moduler importeres i starten af ​​scriptet for at generere et tilfældigt tal og bruge'cyklus()'funktion fra'itværktøjer'modul til gentagelse af data. En liste med tre tilfældige tal bruges som argument for 'cyklus()'funktion. Det gentagne objekt med navnet 'num_liste'initialiseres med returværdien af ​​denne funktion. Det 'tælle'variabel initialiseres til 0, og når værdien af ​​denne variabel bliver 6, det 'mens'loop slutter. Så 'mens'loop gentages seks gange, og hver værdi på listen gentages kun en gang.

# Importer tilfældigt modul
import tilfældigt
# Importer itertools-modul
importere itværktøjer
# Generer et iterabelt objekt baseret på listen over tre tilfældige tal
num_list = itværktøjer.cyklus ([tilfældig.randint (1,5), tilfældig.randint (10,50), tilfældig.randint
(100.500)])
# Initialiser tælleren
tælle = 0
# Iterer sløjfen 6 gange
mens (tæl != 6):
print ('Det aktuelle tilfældige tal er:' + f 'næste (num_list)')
tælle + = 1

Produktion

Følgende output viser, at tre tilfældige tal, 3, 17, og 185, er genereret som listeelementer. Loopen gentages seks gange, og disse tre værdier gentages for de næste iterationer.

Itertools.gentage()

Funktionen 'gentag ()' fungerer som en uendelig iterator og kan tage to argumenter. Når det andet argument udelades, fungerer funktionen 'gentag ()' som en uendelig iterator og gentager værdien et uendeligt antal gange. Denne funktion optager ikke hukommelse for hver gentagelse. Det opretter bare variablen en gang i hukommelsen og gentager den samme variabel et uendeligt antal gange, når der kun er indstillet et argument for denne funktion. Syntaksen for denne funktion er angivet nedenfor.

Syntaks

itværktøjer.gentag (værdi, grænse)

Det første argument bruges til at tage den værdi, der gentages. Det andet argument er valgfrit og bruges til at indstille grænsen for gentagelser.

Eksempel 9: Brug af gentagelsesfunktionen () til itertools-modulet

Det 'itværktøjer'modul importeres i starten af ​​scriptet for at bruge'gentage()'funktion. En strengværdi tages fra brugeren til gentagelse, og der tages en talværdi fra brugeren for at indstille gentagelsesgrænsen. Returneringsværdien af 'gentage()'funktion konverteres derefter til en liste med'liste()'metode og gemt i'listeDatavariabel. Værdierne af 'listeData'udskrives med'tilløkke.

# Importer itertools-modul
importere itværktøjer
# Tag den inputværdi, der gentages
string = input ("Indtast en streng:")
# Tag nummerværdien for at gentage
gentag = int (input ("Indtast det nummer, der skal gentages:"))
# ved hjælp af repeat () for gentagne gange at tilføje strengen på en liste
listData = liste (itværktøjer.gentag (streng, gentag))
# Initialiser i
i = 1
print ("Listeværdierne er: \ n")
# Iterer listen ved hjælp af for loop
for val in listData:
udskriv ("Listeelement% d =% s"% (i, val))
i + = 1

Produktion

Følgende output viser, at 'Python'tages som strengværdien, og 3 tages som det nummer, der bruges til at gentage strengværdien efter kørsel af scriptet. Outputtet viser, at strengen 'Pythongentages tre gange.

Konklusion

Begrebet iterator og anvendelsen af ​​forskellige typer iteratorer i Python forsøges at forklare med de meget enkle eksempler i denne artikel. Python-brugere kan bruge en indbygget iterator eller kan oprette deres brugerdefinerede iterator baseret på kravet. Denne artikel hjælper python-brugerne med at vide om metoderne, der bruges i iteratoren, og hvordan disse metoder fungerer med enhver loop for at læse ethvert iterabelt objekt. Nogle anvendelser af itværktøjer modul af python er også forklaret i denne artikel for at kende flere detaljer om iteratoren i python.

Mus Museklik på venstre museknap fungerer ikke på Windows 10
Museklik på venstre museknap fungerer ikke på Windows 10
Hvis du bruger en dedikeret mus med din bærbare computer eller stationære computer, men musens venstre-klik-knap fungerer ikke på Windows 10/8/7 af en...
Mus Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Hvis du finder ud af, at din musemarkør hopper eller bevæger sig alene, automatisk tilfældigt, mens du skriver Windows-bærbar computer eller computer,...
Mus Sådan vender du musens og touchpadsens rulle retning i Windows 10
Sådan vender du musens og touchpadsens rulle retning i Windows 10
Mus og Touchpads gør ikke kun computing let, men mere effektiv og mindre tidskrævende. Vi kan ikke forestille os et liv uden disse enheder, men det er...