Pitone

Iteratori in Python

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

Metodi dell'iteratore

Ogni oggetto iteratore contiene i seguenti due metodi.

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

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

Iterare con i loop

Si è detto in precedenza che il 'per' loop chiama il 'Il prossimo()' metodo implicitamente durante l'iterazione di qualsiasi oggetto iterabile. Quando un ciclo viene utilizzato per iterare un oggetto iterabile, il 'per' loop chiama 'Il prossimo()' metodo implicitamente e 'mentre' loop chiama il 'Il prossimo()' o '__Il prossimo__()' metodo esplicitamente per leggere il valore successivo dell'oggetto iterabile. Entrambi i tipi di ciclo continuano a chiamare questo metodo fino a quando il 'Interrompi iterazione' viene generato il segnale.

Esempio 1: iterazione di oggetti iterabili con il ciclo "for"

Lo script seguente mostra l'uso di 'per' loop per l'iterazione di 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' loop è usato per iterare i valori di una tupla. Il quarto 'per' loop viene utilizzato per iterare i valori contenuti in una lista. Il quinto 'per' loop viene utilizzato per iterare i valori contenuti in un dizionario.

# Iterare una stringa usando il ciclo for
print("Iterazione della stringa utilizzando il ciclo for")
str = "Pitone"
per val in str :
stampa (valore)
# Iterare un file esistente usando il ciclo for
print("\n\nLettura di un file riga per riga utilizzando il ciclo for")
for line in open("test.TXT"):
print(line, end="")
# # Iterare una tupla usando il ciclo for
print("\n\nIterazione di tuple usando il ciclo for")
tup = ("Libro", "Carta", "Matita", "Penna")
per val in tup:
stampa (valore)
# Iterare una lista usando il ciclo for
print("\n\nElenca l'iterazione usando il ciclo for")
listdata = ["Progettista", "Analista", "Programmatore","Amministratore"]
per val in listdata:
stampa (valore)
# Iterare un dizionario usando il ciclo for
print("\n\nIterazione del dizionario utilizzando il ciclo for")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
per l'indice in dictval :
print("%s ha ottenuto %d punti" %(index, dictval[index]))

Produzione

L'output seguente mostra che i caratteri del valore 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: iterare gli elenchi con il ciclo "while"

Lo script seguente mostra l'uso di un 'mentre'ciclo per iterare un elenco di dati. Qui, il 'itera()' viene utilizzato per inizializzare l'oggetto iterabile e 'Il prossimo()' viene utilizzato il metodo per leggere il valore successivo dell'oggetto iterabile. Interrompi iterazione il segnale viene utilizzato per terminare dall'infinito 'mentre' loop quando nessun elemento dell'elenco è rimasto per la lettura.

# Definisci una lista
listdata = ['google.com', 'bing.com','yahoo.com', 'baidu.com', 'duckduckgo.com']
# Inizializza l'oggetto iterabile
init_iter_object = iter(listdata)
print("Iterazione dei dati dell'elenco utilizzando il ciclo while:\n")
# Dichiara e infinito ciclo while
mentre vero:
provare:
# Il metodo next() viene utilizzato per iterare il valore successivo
valore = successivo(init_iter_object)
stampa (valore)
tranne StopIteration:
# Termina dal ciclo dopo aver iterato tutti i valori
rompere

Produzione

Il seguente output mostra che ogni valore della lista è stato stampato in ogni riga usando il 'Il prossimo()' metodo dopo aver eseguito lo script.

Esempio 3: iterazione di una tupla con il metodo '__next__()' e il ciclo 'while'

Nello script seguente, entrambi 'Il prossimo()' e '__Il prossimo__()' i metodi sono usati per iterare i valori di una tupla. Il 'itera()' viene utilizzato il metodo per creare l'oggetto iterabile, denominato 'init_iter.'Ecco, il'Il prossimo()' viene chiamato due volte per stampare i primi due valori della tupla. Successivamente, un infinito 'mentre' loop viene utilizzato per iterare i valori rimanenti della tupla e 'Interrompi iterazione' viene utilizzato il segnale per terminare dal loop, come nell'esempio precedente.

# definire una tupla
animal_tuple =('Uccello','Leone', 'Scimmia', 'Serpente', 'Elefante')
print("I valori della tupla sono:\n")
# Inizializza un oggetto iteratore usando iter()
init_iter = iter(animal_tuple)
# itera e stampa il valore usando il metodo next()
print(successivo(init_iter))
print(successivo(init_iter))
# Definire un ciclo while infinito
mentre vero:
provare:
# itera e stampa il valore usando il metodo __next__()
print(init_iter.__Il prossimo__())
tranne StopIteration:
# Termina dal ciclo dopo aver iterato tutti i valori
rompere

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.

Iterare con un iteratore personalizzato

Questa sezione mostra come possono essere implementati diversi tipi di iteratori personalizzati creando classi. Sia l'__iter__()' e il '__Il prossimo__()' verranno implementati in una classe e 'mentre' loop 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 denominata 'x_to_the_power_n'è dichiarato nello script. Il '__dentro__()' metodo della classe inizializzerà i valori di X e n che verrà utilizzato al momento della creazione dell'oggetto. 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 denominato 'iter_obj' è creato per chiamare il '__Il prossimo__()' metodo per n-1 volte utilizzando il 'mentre' ciclo per calcolare il valore di Xn. In ogni iterazione, il valore di X sarà moltiplicato per il valore precedente di 'risultato'variabile. Dopo aver terminato il 'mentre' ciclo, il '__Il prossimo__()' verrà chiamato di nuovo per stampare il valore di Xn.

"Crea una classe per calcolare il
x alla potenza n usando l'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
tornare da sé
# Calcola il valore in ogni iterazione
def __next__(self):
se stesso.n >= 0:
se stesso.risultato *= auto.X
se stesso.n -= 1
tornare da sé.risultato
# Prendi i valori di x e n
x = int(input("Inserisci il valore di x: "))
n = int(input("Inserisci il valore di n: "))
# Crea un oggetto della classe
numeri = x_to_la_potenza_n(x,n)
# Crea un iterabile
iter_obj = iter(numeri)
provare:
io = 0
mentre io < n-1):
# Recupera il valore successivo usando il metodo next()
successivo(iter_obj)
io+=1
print("\n%d alla potenza %d è %d" %(x,n,iter_obj.__Il prossimo__()))
tranne StopIteration:
# Termina dallo script se non esiste alcun valore
print(successivo(iter_obj))

Produzione

Il seguente output mostra che 2 è preso come il valore di X e 4 è preso come il valore di n. Quindi, lo script ha calcolato il valore di 2essere 16.

Esempio 5: utilizzo di un iteratore personalizzato infinito

Il seguente script stamperà continuamente i numeri divisibili per 5 con un ritardo di un secondo fino a quando l'utente preme Ctrl + c per generare l'TastieraInterruzione'segnale. L'infinito'mentre' loop viene utilizzato qui per creare un iteratore personalizzato infinito. Il 'tempo' viene importato all'inizio dello script per utilizzare il 'dormire()' metodo per ritardare ogni uscita di un secondo. Il numero 5 è inizializzato con 'numero' come primo numero divisibile nello script e il numero successivo viene generato aggiungendo 5 con il valore precedente di 'numero'variabile.

# Importa modulo orario
tempo di importazione
"
Crea una classe per generare i numeri
che sono divisibili per 5 continuamente
"
classe Numero_Divisibile_per_cinque:
# Inizializza il valore di num
def __iter__(self):
se stesso.numero = 5
tornare da sé
# Calcola il prossimo numero che è divisibile per 5
def __next__(self):
numero_successivo = auto.numero
tempo.dormire(1)
se stesso.numero += 5
return numero_successivo
# Crea un oggetto della classe
Oggetto = Numero_Divisibile_per_cinque()
# Crea oggetto iterabile
iterObject = iter(Oggetto)
# Definisci il ciclo infinito
mentre vero:
provare:
# Vai alla prossima iterazione
print(iterObject.__Il prossimo__())
tranne KeyboardInterrupt:
print("Ctrl+C è premuto.")
# Termina dal ciclo quando si preme Ctrl+C
rompere

Produzione

Il seguente output mostra che il numero ha iniziato a stampare da 5 e ha stampato continuamente i numeri successivi uno dopo l'altro con una durata di un secondosecond. 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

Lo script seguente mostra come interrompere l'iteratore infinito personalizzato dopo aver completato un numero specificato di iterazioni. Il '__iter__()' metodo della classe inizializzerà i valori di 'n' e 'risultato'variabili di classe. Lo script calcolerà i quadrati dei numeri, a partire da 1, che sono memorizzati nella variabile n, e stampa il valore quadrato di n fino al valore di n è più grande di 5. Qui viene dichiarato un ciclo while infinito per chiamare il '__Il prossimo__()' metodo per stampare il valore quadrato di n. Quando il valore di n raggiunge 6, il 'Interrompi iterazione' verrà generato il segnale per terminare il ciclo.

# Importa modulo orario
tempo di importazione
"
Crea una classe da calcolare
il quadrato del numero parte da 1 fino a
il valore del numero è inferiore a 6
"
classe calcola_potenza:
# Inizializza il valore di num
def __iter__(self):
se stesso.n = 1
se stesso.risultato=0
tornare da sé
# Calcola il prossimo numero che è divisibile per 5
def __next__(self):
# Controlla che il valore di n sia minore o uguale a 5 o meno
se stesso.n <= 5:
se stesso.risultato = auto.n**2
tempo.dormire (0.5)
se stesso.n += 1
tornare da sé.risultato
altro:
aumentare StopIteration
# Crea un oggetto della classe
Oggetto = calcola_potenza()
# Crea oggetto iterabile
iterObject = iter(Oggetto)
# Definisci il ciclo infinito
mentre vero:
provare:
# Passa alla prossima iterazione e stampa il valore quadrato
print("Il quadrato di %dè%d" %(iterObject.n,iterOggetto.__Il prossimo__()))
tranne StopIteration:
print("\nTerminato dal ciclo.")
# Termina dal ciclo
rompere

Produzione

Il seguente output mostra che l'iteratore personalizzato infinito è 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.

Iterare con itertools

Python ha un modulo integrato chiamato 'itertools' che può essere utilizzato per creare un iteratore per l'iterazione dei dati utilizzando un ciclo. La prossima sezione di questo articolo mostra come usare tre funzioni in questo modulo.

itertools.contare()

Il 'itertools.continuaLa 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 count di questo metodo. La sintassi di questa funzione è riportata di seguito.

Sintassi

itertools.conteggio(inizio=0, passo=1)

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

Esempio 7: uso di count() Funzione di itertools

Il seguente script calcolerà la somma da 0 per n numeri, dove il valore di n sarà preso dall'utente. Il 'contare()' la funzione è importata da 'itertools'all'inizio dello script. Il 'mio_iterator' oggetto è inizializzato con 'contare()' funzione, con 'inizio' valore di 0 e 'passo' valore di 1. Successivamente, il 'somma_risultato'la variabile è inizializzata dal primo valore dell'oggetto iterabile. Il valore iniziale è inizializzato sulla 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 'Il prossimo()' 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 importazioni
dal conteggio delle importazioni di itertools
# Crea un oggetto iterabile di count()
my_iterator = count(start=0, step=1)
# Legge il primo valore dall'iteratore
sum_result = next(my_iterator)
# Prendi un input numerico per terminare il ciclo while infinito
n = int(input("Inserisci il valore limite:"))
# Inizializza il valore di i e i numeri
i = somma_risultato
numeri = f'i'
# Dichiara il ciclo infinito
mentre vero:
# Aggiungi il numero in ogni iterazione
somma_risultato += i
i = successivo(mio_iteratore)
# Termina il ciclo se il valore di i è maggiore di n
se(i > n):
rompere
# Aggiungi il valore numerico come una stringa con il simbolo '+'
numeri += "+" + f'i'
# Stampa il valore finale
print("%s = %d" % (numeri, somma_risultato))

Produzione

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

Itertools.ciclo()

Questa funzione contiene un solo 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, elenchi, ecc. può essere usato come oggetto. I ritorni dell'oggetto iterabile di questa funzione sono usati per iterare ogni valore dell'oggetto che sarà usato come argomento usando il 'Il prossimo()' metodo. Il numero di volte in cui i valori dell'oggetto iterabile iteraranno saràbasato sul numero di iterazioni del ciclo. La sintassi di questa funzione è riportata di seguito.

Sintassi

itertools.ciclo(Oggetto)

Esempio 8: uso di cycle() Funzione di itertools

Il 'casuale' e 'itertools' i moduli vengono importati all'inizio dello script per generare un numero casuale e utilizzare il 'ciclo()'funzione da  'itertools' modulo per la ripetizione dei dati. Un elenco di tre numeri casuali viene utilizzato come argomento del 'ciclo()' funzione. L'oggetto iterabile denominato 'num_list'è inizializzato dal valore di ritorno di questa funzione. Il 'contare' la variabile è inizializzata su 0, e quando il valore di questa variabile diventa 6, il 'mentre'il ciclo terminerà. Così il 'mentre' il ciclo itererà sei volte e ogni valore dell'elenco si ripeterà solo una volta.

# Importa modulo casuale
importa casuale
# Importa modulo itertools
importare itertools
# Genera un oggetto iterabile basato sull'elenco di tre numeri casuali
num_list = itertools.ciclo([casuale.randint(1,5),casuale.randint(10,50),random.randint
(100.500)] )
# Inizializza il contatore
conteggio = 0
# Itera il ciclo per 6 volte
mentre (conta != 6):
print('Il numero casuale corrente è: ' + f'next(num_list)')
conteggio+=1

Produzione

Il seguente output mostra che tre numeri casuali, 3, 17, e 185, sono stati generati come elementi dell'elenco. Il ciclo viene ripetuto sei volte e questi tre valori vengono ripetuti per le successive iterazioni.

Itertools.ripetere()

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

Sintassi

itertools.ripeti (valore, limite)

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

Esempio 9: uso della funzione repeat() del modulo itertools

Il 'itertools' il modulo viene importato all'inizio dello script per utilizzare il 'ripetere()' funzione. Un valore stringa verrà preso dall'utente per la ripetizione e un valore numerico verrà preso dall'utente per impostare il limite di ripetizione. Il valore di ritorno di 'ripetere()' funzione sarà quindi convertita in un elenco con il 'elenco()' metodo e memorizzato nel 'listaDati'variabile. I valori dell'listaDati' verrà stampato con il 'per' ciclo continuo.

# Importa modulo itertools
importare itertools
# Prendi il valore di input che si ripeterà
stringa = input("Inserisci una stringa: ")
# Prendi il valore numerico da ripetere
ripeti = int(input("Inserisci il numero da ripetere: "))
# usando repeat() per aggiungere ripetutamente la stringa in una lista
listData= lista(itertools.ripeti (stringa, ripeti))
# Inizializza i
io = 1
print ("I valori della lista sono: \n")
# Itera la lista usando il ciclo for
per val in listData:
print("Elenco %d =%s" %(i,val))
io += 1

Produzione

Il seguente output mostra che 'Pitone' viene preso come valore della stringa e 3 viene preso come il numero usato per ripetere il valore della stringa dopo aver eseguito lo 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 provati a spiegare con gli esempi molto semplici in questo articolo. Gli utenti Python possono utilizzare un iteratore integrato o creare il proprio iteratore personalizzato in base ai requisiti. Questo articolo aiuterà gli utenti Python a conoscere i metodi utilizzati nell'iteratore e come questi metodi funzionano con qualsiasi ciclo per leggere qualsiasi oggetto iterabile. Alcuni usi di itertools modulo di python sono spiegati anche in questo articolo per conoscere maggiori dettagli dell'iteratore in python.

Come utilizzare GameConqueror Cheat Engine in Linux
L'articolo copre una guida sull'utilizzo del motore cheat GameConqueror in Linux. Molti utenti che giocano su Windows utilizzano spesso l'applicazione...
I migliori emulatori di console di gioco per Linux
Questo articolo elencherà il popolare software di emulazione della console di gioco disponibile per Linux. L'emulazione è un livello di compatibilità ...
Le migliori distribuzioni Linux per il gioco nel 2021
Il sistema operativo Linux ha fatto molta strada dal suo aspetto originale, semplice e basato su server. Questo sistema operativo è notevolmente migli...