Iteratori in Python

Iteratori in Python
Un iteratore è uno strumento prezioso per Python. È un oggetto usato per iterare tutti gli elementi di una raccolta. Iteratore dà accesso agli elementi di un contenitore, ma non fa l'iterazione da sola. Funziona come un cursore del database e viene utilizzato per leggere l'elenco dei record uno per uno. Ad esempio, a 'per'Loop che itera i valori di un contenitore funziona come un iteratore. Python ha molti iteratori integrati per oggetti iterabili, come elenchi, tuple, dizionari, ecc. Senza questi iteratori "ITTEROOLS'Le funzioni possono essere utilizzate per restituire altri iteratori in Python. Questo articolo mostra come utilizzare il ciclo come iteratore, iteratore personalizzato, iteratore infinito e il controllo di Infinite Iterator in Python 3. Alcuni usi del 'ITTEROOLS'Le funzioni sono anche spiegate nell'ultima parte di questo tutorial.

Metodi iteratori

Ogni oggetto iteratore contiene i seguenti due metodi.

  • _ _iter_ _ ()

Questo metodo viene utilizzato per inizializzare l'oggetto iterabile. L'oggetto restituito ha il metodo '_ _Prossimo_ _()'In Python 3.

  • _ _Prossimo_ _()

Questo metodo restituisce il valore successivo dell'oggetto iterabile. La relazione tra l'iteratore e l'oggetto iterabile è mostrata nel diagramma seguente.

Iterazione con loop

È stato menzionato in precedenza che il 'per'Loop chiama il'Prossimo()'Metodo implicitamente quando si itera qualsiasi oggetto iterabile. Quando viene utilizzato un ciclo per iterare un oggetto iterabile, il 'per'Loop chiama il'Prossimo()'Metodo implicitamente e il'Mentre'Loop chiama il'Prossimo()' O '__Prossimo__()'Metodo esplicitamente per leggere il valore successivo dell'oggetto iterabile. Entrambi i tipi di loop continuano a chiamare questo metodo fino a "Stopiteration'Il segnale viene generato.

Esempio 1: iterating iterable oggetti con "per" loop

Il seguente script mostra l'uso di 'per'Loop per iterando cinque diversi oggetti iterabili. Il primo 'per'Loop viene utilizzato per iterare il valore della stringa e stampare ogni carattere della stringa in ogni iterazione. Il secondo 'per'Loop viene utilizzato per iterare il contenuto di un file di testo esistente e stampare ogni riga del file in ogni iterazione. Il terzo 'per'Il ciclo è usato per iterare i valori di una tupla. Il quarto 'per'Il ciclo viene utilizzato per iterare i valori contenuti in un elenco. Il quinto 'per'Il ciclo viene utilizzato per iterare i valori contenuti in un dizionario.

# Iterando una stringa usando per loop
Stampa ("Iterazione della stringa utilizzando per loop")
str = "Python"
Per Val in STR:
Stampa (Val)
# Iterando un file esistente utilizzando per loop
print ("\ n \ nreading una riga di file per riga utilizzando per loop")
per linea in aperto ("Test.TXT"):
stampa (riga, end = "")
# # Iterando una tupla utilizzando per loop
print ("\ n \ ntuple iterazione utilizzando per loop")
tup = ("libro", "carta", "matita", "penna")
per val in tup:
Stampa (Val)
# Iterando un elenco utilizzando per loop
print ("\ n \ nlist iterazione utilizzando per loop")
listData = ["Designer", "Analyst", "Programmatore", "Amministratore"]
Per Val in ListData:
Stampa (Val)
# Iteterating un dizionario usando per loop
print ("\ n \ nDictionary Iterazione usando per loop")
dictval = 'meher': 95, 'sakib': 97, 'akhi': 70, 'fiaz': 78
per indice in dictval:
Stampa (" %s ottenuto %d segni" %(indice, dictval [indice])

Produzione

Il seguente output mostra che i caratteri del valore della stringa; le linee del test.TXT file; e gli elementi delle tuple, dell'elenco e del dizionario vengono stampati dopo aver eseguito lo script.

Esempio 2: Iterating elenchi con "While" Loop

Il seguente script mostra l'uso di un 'Mentre'Loop per iterare un elenco di dati. Qui, il 'iter ()"Il metodo viene utilizzato per inizializzare l'oggetto iteerabile e il"Prossimo()'Il metodo viene utilizzato per leggere il valore successivo dell'oggetto iterabile. Stopiteration Il segnale viene utilizzato per terminare dall'infinito 'Mentre' Loop quando nessun elemento dell'elenco è rimasto per la lettura.

# Definisci un elenco
listData = ['Google.com ',' Bing.com ',' Yahoo.com ',' Baidu.com ',' DuckDuckgo.com ']
# Inizializza l'oggetto iteble
init_iter_object = iter (listData)
Stampa ("Iterating Elenco Dati utilizzando While Loop: \ n")
# Dichiarare e infinito durante il ciclo
mentre è vero:
Tentativo:
# il metodo Next () viene utilizzato per iterare il prossimo valore
value = next (init_iter_object)
Stampa (valore)
Tranne la stopiteration:
# Termina dal ciclo dopo aver iterato tutti i valori
rottura

Produzione

Il seguente output mostra che ogni valore dell'elenco è stato stampato in ogni riga utilizzando il 'Prossimo()'Metodo dopo aver eseguito lo script.

Esempio 3: iterando una tupla con metodo '__Next __ ()' e loop 'mentre'

Nello script seguente, entrambi 'Prossimo()' E '__Prossimo__()'I metodi sono usati per iterando i valori di una tupla. IL 'iter ()'Il metodo viene utilizzato per creare l'oggetto iteerabile, chiamato'init_iter.'Ecco, il' 'Prossimo()'Il metodo è chiamato due volte per stampare i primi due valori della tupla. Successivamente, un infinitoMentre'Loop viene usato per iterare i valori rimanenti della tupla e il'Stopiteration'Il segnale viene utilizzato per terminare dal ciclo, come nell'esempio precedente.

# Definisci una tupla
Animal_Tuple = ('Bird', 'Lion', 'Monkey', 'Snake', 'Elephant')
stampa ("I valori della tupla sono: \ n")
# Inizializza un oggetto iteratore usando iter ()
init_iter = iter (animale_tuple)
# iterare e stampare valore utilizzando il metodo Next ()
Print (Next (init_iter))
Print (Next (init_iter))
# Definisci un infinito durante il ciclo
mentre è vero:
Tentativo:
# Iterazione e valore di stampa usando il metodo __Next __ ()
Stampa (init_iter.__Prossimo__())
Tranne la stopiteration:
# Termina dal ciclo dopo aver iterato tutti i valori
rottura

Produzione

Il seguente output mostra che dopo aver eseguito lo script, i primi due valori "Uccello' E 'Leone,'sono stampati con il'Prossimo()"Metodo, mentre gli altri tre valori,"Scimmia,"Serpente,' E 'Elefante,'sono stampati con il'__Prossimo__()' metodo.

Iterato con un iteratore personalizzato

Questa sezione mostra come diversi tipi di iteratrini personalizzati possono essere implementati creando classi. Entrambi i '__iter __ ()' e il '__Prossimo__()"I metodi saranno implementati in una classe e il"Mentre'Il ciclo verrà utilizzato per iterare i valori dell'oggetto iterabile. La prossima parte di questo articolo mostrerà anche come creare un iteratore personalizzato infinito e controllare l'iterazione.

Esempio 4: utilizzo di un semplice iteratore personalizzato

Il seguente script consente di calcolare il valore di XN Utilizzando un iteratore personalizzato senza utilizzare alcuna funzione integrata di Python. La classe nominata 'x_to_the_power_n'è dichiarato nella sceneggiatura. IL '__dentro__()'Il metodo della classe inizializzerà i valori di X E N che verrà utilizzato al momento della creazione di oggetti. IL '__iter __ ()"Il metodo inizializzerà la variabile di classe, che memorizzerà il"risultato'variabile del calcolo in ogni iterazione. I valori di X E N sarà preso come input dall'utente. Un oggetto della classe 'numeri'è creato con X E N. Successivamente, un oggetto iterabile chiamato 'iter_obj'è creato per chiamare il' '__Prossimo__()'Metodo per N-1 volte usando il 'Mentre'Loop per calcolare il valore di XN. In ogni iterazione, il valore di X verrà moltiplicato per il valore precedente del 'risultato'variabile. Dopo aver terminato il 'Mentre'Loop, il'__Prossimo__()'Il metodo verrà chiamato di nuovo per stampare il valore di XN.

"Crea una classe per calcolare il
X a Power n usando iteratore
"
Classe x_to_the_power_n:
# Inizializza il valore di x e n
def __init __ (self, x = 0, n = 0):
se stesso.x = x
se stesso.n = n
# Inizializza l'iterabile
def __iter __ (self):
se stesso.risultato = 1
Restituisci se stessi
# Calcola il valore in ogni iterazione
def __next __ (self):
se sé.n> = 0:
se stesso.risultato *= self.X
se stesso.n -= 1
Restituisci se stessi.risultato
# Prendi i valori di x e n
x = int (input ("Immettere il valore di x:"))
n = int (input ("Immettere il valore di n:"))
# Crea un oggetto della classe
numeri = x_to_the_power_n (x, n)
# Crea un iteble
iter_obj = iter (numeri)
Tentativo:
i = 0
mentre io < n-1):
# Rekive il valore successivo usando il metodo Next ()
Next (iter_obj)
i+= 1
stampa ("\ n %d al potere %d è %d" %(x, n, iter_obj.__Prossimo__()))
Tranne la stopiteration:
# Termina dallo script se non esiste alcun valore
Stampa (Next (iter_obj))

Produzione

Il seguente output lo mostra 2 è preso come valore di X E 4 è preso come valore di N. Quindi, lo script ha calcolato il valore di 24 essere 16.

Esempio 5: utilizzo di un iteratore personalizzato infinito

Il seguente script stamperà continuamente i numeri divisibili di 5 con un ritardo di un secondo fino a quando l'utente preme Ctrl + c per generare il 'Tastiera'Segnale. L'infinito 'Mentre'Loop viene utilizzato qui per creare un iteratore personalizzato infinito. IL 'tempo"Il modulo viene importato all'inizio dello script per utilizzare il"sonno()'Metodo per ritardare ogni output per un secondo. Il numero 5 è inizializzato in ''Num"Variabile come primo numero divisibile nello script e il numero successivo viene generato aggiungendo 5 con il valore precedente di"Num'variabile.

# Modulo di importazione
tempo di importazione
"
Crea una classe per generare i numeri
che sono divisibili per 5 continuamente
"
Classe Number_divisible_by_five:
# Inizializza il valore di num
def __iter __ (self):
se stesso.Num = 5
Restituisci se stessi
# Calcola il numero successivo che è divisibile per 5
def __next __ (self):
Next_num = self.Num
tempo.sonno (1)
se stesso.num += 5
Restituisci Next_num
# Crea un oggetto della classe
Object = number_divisible_by_five ()
# Crea oggetto iteble
iTerObject = iter (oggetto)
# Definisci Infinite Loop
mentre è vero:
Tentativo:
# Vai per la prossima iterazione
Stampa (iTerObject.__Prossimo__())
Tranne la tastiera interrupt:
Stampa ("Ctrl+C è premuto.")
# Termina dal ciclo quando viene premuto Ctrl+C
rottura

Produzione

La seguente uscita mostra che il numero ha iniziato a stampare da 5 e stampato continuamente i numeri successivi uno dopo l'altro con una durata di un secondo. Quando l'utente ha premuto Ctrl + c Dopo aver stampato il numero 60, il messaggio 'Ctrl+C è premuto.'è stato stampato, prima di terminare lo script.

Esempio 6: controllo di un iteratore infinito personalizzato

Il seguente script mostra come fermare l'iteratore Infinite personalizzato dopo aver completato un numero specifico di iterazioni. IL '__iter __ ()"Il metodo della classe inizializzerà i valori del"N' E 'risultato'Variabili di classe. Lo script calcolerà i quadrati dei numeri, a partire da 1, che sono archiviati nella variabile N, e stampare il valore quadrato di N fino al valore di N è più grande di 5. Un ciclo infinito è stato dichiarato qui per chiamare il '__Prossimo__()'Metodo per stampare il valore quadrato di N. Quando il valore di N Raggiungi 6, IL 'Stopiteration'Il segnale genererà per terminare il ciclo.

# Modulo di importazione
tempo di importazione
"
Crea una classe per calcolare
Il quadrato del numero inizia da 1 fino a
Il valore del numero è inferiore a 6
"
Classe Calcola_Power:
# Inizializza il valore di num
def __iter __ (self):
se stesso.n = 1
se stesso.risultato = 0
Restituisci se stessi
# Calcola il numero successivo che è divisibile per 5
def __next __ (self):
# Controllare il valore di n è inferiore o uguale a 5 o no
se sé.N <= 5:
se stesso.risultato = self.N ** 2
tempo.dormire (0.5)
se stesso.n += 1
Restituisci se stessi.risultato
altro:
Sollevare la taglio
# Crea un oggetto della classe
Object = calcoculate_power ()
# Crea oggetto iteble
iTerObject = iter (oggetto)
# Definisci Infinite Loop
mentre è vero:
Tentativo:
# Scegli la prossima iterazione e stampano il valore quadrato
Stampa ("Il quadrato di %d è %d" %(iTerObject.n, iTerObject.__Prossimo__()))
Tranne la stopiteration:
Stampa ("\ nterminato dal loop.")
# Termina dal ciclo
rottura

Produzione

Il seguente output mostra che l'iteratore personalizzato Infinite è stato terminato quando il valore di N è diventato maggiore di 5. Lo script ha calcolato e stampato i valori quadrati dei valori numerici da 1 a 5.

Iterato con iTertools

Python ha un modulo integrato chiamato 'ITTEROOLS'che può essere utilizzato per creare un iteratore per iterating dati utilizzando un loop. La prossima sezione di questo articolo mostra come utilizzare tre funzioni in questo modulo.

ITTEROOLS.contare()

IL 'ITTERTOOLS.cont'La funzione può essere utilizzata con il'carta geografica()'Metodo per generare dati sequenziali e con il'cerniera lampo()'Metodo per aggiungere sequenze utilizzando il parametro di conteggio di questo metodo. La sintassi di questa funzione è riportata di seguito.

Sintassi

ITTEROOLS.Conte (start = 0, Step = 1)

Qui, il primo parametro, "inizio,'viene utilizzato per definire il valore iniziale della sequenza e 0 è il valore predefinito di questo parametro. Il secondo parametro, "fare un passo,'viene utilizzato per impostare la differenza tra i numeri consecutivi e 1 è il valore predefinito di questo parametro.

Esempio 7: Uso della funzione Count () di iTertools

Il seguente script calcolerà la somma da 0 A N numeri, dove il valore di N sarà preso dall'utente. IL 'contare()'La funzione viene importata da'ITTEROOLS'All'inizio della sceneggiatura. IL 'my_iterator'L'oggetto viene inizializzato con il'contare()'funzione, con a'inizio'Valore di 0 e a'fare un passo'Valore di 1. Successivamente, il 'sum_result'La variabile è inizializzata dal primo valore dell'oggetto iterabile. Il valore iniziale viene inizializzato nella variabile io e il numero iniziale viene memorizzato come carattere nella variabile, numeri che verranno utilizzati per combinare altri numeri in ogni iterazione. I valori dei numeri sequenziali verranno aggiunti in ogni iterazione quando il 'Prossimo()'Il metodo è chiamato. Quando il valore di io diventa maggiore di N, Lo script terminerà visualizzando il risultato della somma.

"Il seguente script calcolerà
la somma di 0 al numero che verrà preso come input.
"
# Conteggio di importazione
dal conteggio delle importazioni di iTerools
# Crea un oggetto iterabile di conte ()
my_iterator = count (start = 0, step = 1)
# Leggi il primo valore da Iteratore
sum_result = Next (my_iterator)
# Prendi un input numerico per terminare l'infinito durante il loop
n = int (input ("Immettere il valore limite:"))
# Inizializza il valore di I e dei numeri
i = sum_result
numeri = f 'i'
# Dichiara Infinite Loop
mentre è vero:
# Aggiungi il numero in ogni iterazione
sum_result += i
i = Next (my_iterator)
# Termina il ciclo se il valore di i è più di n
if (i> n):
rottura
# Aggiungi il valore del numero come stringa con simbolo '+'
numeri += " +" +f 'i'
# Stampa il valore finale
print (" %s = %d" %(numeri, sum_result))

Produzione

Il seguente output mostra che il numero 10 viene preso come input utilizzato per terminare il loop dopo l'esecuzione dello script. In questo output, lo script ha calcolato la somma da 0 a 10 e stampato l'uscita, 0+1+2+3+4+5+6+7+8+9+10 = 55.

ITTEROOLS.ciclo()

Questa funzione contiene solo un argomento, che può essere qualsiasi oggetto. Lo scopo di questa funzione è ripetere i valori dell'oggetto dopo aver completato l'iterazione di tutti i valori. Qui, stringhe, tuple, liste, ecc. può essere usato come oggetto. I ritorni di oggetto iterabile di questa funzione vengono utilizzati per iterare ogni valore dell'oggetto che verrà usato come argomento usando il 'Prossimo()' metodo. Il numero di volte in cui i valori dell'oggetto iterabile iteriranno si baserà sul numero di iterazioni del loop. La sintassi di questa funzione è riportata di seguito.

Sintassi

ITTEROOLS.ciclo (oggetto)

Esempio 8: Utilizzo della funzione Cycle () di iTertools

IL 'casuale' E 'ITTEROOLS"I moduli vengono importati all'inizio dello script per generare un numero casuale e utilizzare il"ciclo()'funzione dal' 'ITTEROOLS'Modulo per ripetere i dati. Un elenco di tre numeri casuali viene usato come argomento del 'ciclo()' funzione. L'oggetto iterabile chiamato 'NUM_LIST'è inizializzato dal valore di ritorno di questa funzione. IL 'contare'La variabile è inizializzata a 0, e quando il valore di questa variabile diventa 6, IL 'Mentre'Loop terminerà. Così il 'Mentre'Loop iterirà sei volte e ogni valore dell'elenco si ripeterà solo una volta.

# Importa il modulo casuale
importare casuali
# Importa il modulo ITTOOLS
Importa iTtools
# Genera un oggetto iterabile in base all'elenco di tre numeri casuali
NUM_LIST = iTTERTOOLS.ciclo ([casuale.Randint (1,5), casuale.Randint (10,50), casuale.Randint
(100.500)])
# Inizializza il contatore
conta = 0
# Itera il ciclo per 6 volte
mentre (conta != 6):
print ('Il numero casuale corrente è:' + f 'next (num_list)')
conta+= 1

Produzione

Il seguente output mostra che tre numeri casuali, 3, 17, E 185, sono stati generati come elementi elenchi. Il ciclo è iterato sei volte e questi tre valori vengono ripetuti per le iterazioni successive.

ITTEROOLS.ripetere()

La funzione "ripetizione ()" funziona come un iteratore infinito e può prendere due argomenti. Quando il secondo argomento viene omesso, la funzione "ripetizione ()" funziona come un iteratore infinito e ripete il valore un numero infinito di volte. Questa funzione non occupa la memoria per ogni ripetizione. Crea solo la variabile una volta nella memoria e ripete la stessa variabile un numero infinito di volte in cui è impostato un solo argomento per questa funzione. La sintassi di questa funzione è riportata di seguito.

Sintassi

ITTEROOLS.Ripeti (valore, limite)

Il primo argomento viene utilizzato per prendere il valore che si ripeterà. Il secondo argomento è facoltativo e viene utilizzato per impostare il limite delle ripetizioni.

Esempio 9: Utilizzo della funzione ripetizione () del modulo ITERTURS

IL 'ITTEROOLS"Il modulo viene importato all'inizio dello script per utilizzare il"ripetere()' funzione. Un valore di stringa verrà prelevato dall'utente per ripetere e un valore numerico verrà preso dall'utente per impostare il limite di ripetizione. Il valore di ritorno del 'ripetere()"La funzione verrà quindi convertita in un elenco con il"elenco()'Metodo e memorizzato nel' 'ListData'variabile. I valori del 'ListData'sarà stampato con il'per' ciclo continuo.

# Importa il modulo ITTOOLS
Importa iTtools
# Prendi il valore di input che si ripeterà
string = input ("Immettere una stringa:")
# Prendi il valore del numero per ripetere
ripetizione = int (input ("Immettere il numero per ripetere:"))
# Utilizzo di ripetizione () per aggiungere ripetutamente la stringa in un elenco
ListData = List (iTerTools.ripeti (stringa, ripeti))
# Inizia i
i = 1
print ("I valori dell'elenco sono: \ n")
# Itera l'elenco utilizzando per loop
Per Val in ListData:
print ("elenco elemento %d = %s" %(i, val))
i += 1

Produzione

Il seguente output lo mostra "Pitone'è preso come valore stringa e 3 viene preso come numero utilizzato per ripetere il valore della stringa dopo l'esecuzione dello script. L'output mostra che la stringa 'Pitone'Si ripete tre volte.

Conclusione

Il concetto di iteratore e gli usi di diversi tipi di iteratori in Python sono tentati a spiegare con gli esempi molto semplici in questo articolo. Gli utenti di Python possono utilizzare un iteratore integrato o possono creare il loro iteratore personalizzato in base al requisito. Questo articolo aiuterà gli utenti di Python a conoscere i metodi utilizzati nell'iteratore e come questi metodi funzionano con qualsiasi ciclo per leggere qualsiasi oggetto iterabile. Alcuni usi di ITTEROOLS Il modulo di Python è anche spiegato in questo articolo per conoscere maggiori dettagli sull'iteratore in Python.