Iteratorzy w Pythonie

Iteratorzy w Pythonie
Iterator jest cennym narzędziem dla Pythona. Jest to obiekt używany do iterowania wszystkich elementów kolekcji. Iterator daje dostęp do elementów pojemnika, ale sam nie robi iteracji. Działa jak kursor bazy danych i służy do odczytu listy rekordów jeden po drugim. Na przykład a 'Do„Pętla, która itera wartości kontenera, działa jako iterator. Python ma wiele wbudowanych iteratorów dla iteracyjnych obiektów, takich jak listy, krotki, słowniki itp. Bez tych iteratorów ”IterTools„Funkcje mogą być używane do zwrotu innych iteratorów w Pythonie. W tym artykule pokazuje, jak używać pętli jako iteratora, niestandardowego iteratora, nieskończony iterator i kontrolę Infinite Iterator w Python 3. Niektóre zastosowania ''IterTools„Funkcje są również wyjaśnione w ostatniej części tego samouczka.

Metody iteratora

Każdy obiekt iterator zawiera następujące dwie metody.

  • _ _iter_ _ ()

Ta metoda służy do inicjowania obiektu iterowalnego. Zwracany obiekt ma metodę '_ _Następny_ _()„W Python 3.

  • _ _Następny_ _()

Ta metoda zwraca następną wartość iterabilnego obiektu. Związek między iteratorem a obiektem iterowalnym jest pokazany na poniższym schemacie.

Iteracyjne z pętlami

Wspomniano wcześniej, że 'Do`` Pętla woła ''Następny()„Metoda domyślnie podczas iterowania dowolnego iteracyjnego obiektu. Gdy do iteracji obiektu używa się pętli, „Do`` Pętla woła ''Następny()„Metoda domyślnie i”chwila`` Pętla woła ''Następny()' Lub '__Następny__()„Metoda jawna do odczytania następnej wartości obiektu iterowalnego. Oba rodzaje pętli nadal nazywają tę metodę do czasuPrzerwanie„Sygnał jest generowany.

Przykład 1: Iteracyjne iteracyjne obiekty z pętlą „for”

Poniższy skrypt pokazuje użycie 'Do„Pętle za iterowanie pięciu różnych obiektów iteracyjnych. Pierwszy 'Do„Pętla służy do iteracji wartości łańcucha i wydrukowania każdego znaku łańcucha w każdej iteracji. Drugi 'Do„Pętla służy do iteracji zawartości istniejącego pliku tekstowego i wydrukowania każdej wierszy pliku w każdej iteracji. Trzeci 'Do„Pętla jest używana do iteracji wartości krotki. Czwarty 'Do„Pętla jest używana do iteracji wartości zawartych na liście. Piąty 'Do„Pętla jest używana do iteracji wartości zawartych w słowniku.

# Iterowanie łańcucha za pomocą pętli
drukuj („Iteracja ciągów za pomocą pętli”)
str = "Python"
dla Val in str:
druk (val)
# Iterowanie istniejącego pliku za pomocą pętli
Drukuj („\ n \ nReading a File Line według linii za pomocą pętli”)
dla linii otwartej („Testuj.tekst"):
print (linia, end = "")
# # Iterowanie krotki za pomocą pętli
Drukuj („\ n \ ntuple iteracja za pomocą pętli”)
tup = („Book”, „papier”, „ołówek”, „pióra”)
dla Val in Tup:
druk (val)
# Iterowanie listy używającej do pętli
Drukuj („\ n \ nlist iteracja za pomocą pętli”)
ListData = [„Designer”, „Analityk”, „Programator”, „Administrator”]
dla Val w ListData:
druk (val)
# Iterowanie słownika używającego do pętli
Drukuj („\ n \ ndictionary iteracja przy użyciu do pętli”)
dictval = „Meher”: 95, „sakib”: 97, „akhi”: 70, „fiaz”: 78
dla indeksu w Dictval:
Drukuj („ %S osiągnięty %D znakki” %(indeks, Dictval [indeks])))

Wyjście

Poniższe dane wyjściowe pokazuje, że znaki wartości ciągu; linie test.tekst plik; a elementy krotek, listy i słownika są drukowane po uruchomieniu skryptu.

Przykład 2: Iteracyjne listy z pętlą „While”

Poniższy skrypt pokazuje użycie a 'chwila„Pętla do iteracji listy danych. Tutaj 'iter ()„Metoda służy do inicjalizacji obiektu iterowalnego i”Następny()„Metoda jest używana do odczytania następnej wartości obiektu iterowalnego. Przerwanie Sygnał służy do zakończenia z nieskończoności 'chwila' Pętla, gdy nie pozostawiono żadnej pozycji listy do odczytania.

# Zdefiniuj listę
ListData = ['Google.com ', „bing.com ', „yahoo.com ', „Baidu.com ', „Duckduckgo.com ']
# Zainicjuj obiekt iterowalny
init_iter_object = iTer (ListData)
Drukuj („Iteracyjne dane z listy za pomocą pętli: \ n”)
# Deklaruj i nieskończone podczas pętli
Choć prawda:
próbować:
# metoda następnego () jest używana do iteracji następnej wartości
wartość = następny (init_iter_object)
Drukuj (wartość)
Z wyjątkiem przerwy:
# Zakończ z pętli po iterowaniu wszystkich wartości
przerwa

Wyjście

Poniższe dane wyjściowe pokazuje, że każda wartość listy została wydrukowana w każdym wierszu za pomocą 'Następny()„Metoda po uruchomieniu skryptu.

Przykład 3: Iterowanie krotki z „__Next __ ()„ metodą i ”, podczas gdy„ pętla

W poniższym skrypcie oba 'Następny()' I '__Następny__()„Metody są stosowane do iteracji wartości krotki. ''iter ()„Metoda jest używana do utworzenia iterowalnego obiektu, nazwanego”init_iter.' Tutaj 'Następny()„Metoda jest nazywana dwukrotnie do wydrukowania dwóch pierwszych wartości krotki. Następnie nieskończonychwila„Pętla jest używana do iteracji pozostałych wartości krotki i”Przerwanie„Sygnał służy do zakończenia z pętli, jak w poprzednim przykładzie.

# Zdefiniuj krotkę
Animal_Tuple = („Bird”, „Lion”, „Monkey”, „Snake”, „Elephant”)
wydrukuj („Wartości krotki to: \ n”)
# Zainicjuj obiekt iterator za pomocą ITER ()
init_iter = iTer (zwierzęce)
# Iteruj i wydrukuj wartość za pomocą metody następnej ()
print (następny (init_iter))
print (następny (init_iter))
# Zdefiniuj nieskończoną pętlę
Choć prawda:
próbować:
# Wartość iteruj i wydrukuj za pomocą metody __Next __ ()
drukuj (init_iter.__Następny__())
Z wyjątkiem przerwy:
# Zakończ z pętli po iterowaniu wszystkich wartości
przerwa

Wyjście

Poniższe dane wyjściowe pokazuje, że po uruchomieniu skryptu pierwsze dwie wartości ”Ptak' I 'Lew,„są drukowane z”Następny()„Metoda, podczas gdy pozostałe trzy wartości”Małpa,"Wąż,' I 'Słoń,„są drukowane z”__Następny__()' metoda.

Iteracja z niestandardowym iteratorem

Ta sekcja pokazuje, w jaki sposób można wdrożyć różne typy iteratorów niestandardowych, tworząc klasy. Oboje '__iter __ ()„I”__Następny__()„Metody zostaną zaimplementowane w klasie i”chwila„Pętla zostanie użyta do iteracji wartości obiektu iterowalnego. Następna część tego artykułu pokaże również, jak utworzyć nieskończony niestandardowy iterator i kontrolować iterację.

Przykład 4: Korzystanie z prostego niestandardowego iteratora

Poniższy skrypt pozwala obliczyć wartość XN Korzystając z niestandardowego iteratora bez użycia wbudowanej funkcji Pythona. Klasa nazwana 'x_to_the_power_n'jest zadeklarowane w skrypcie. ''__w tym__()„Metoda klasy zainicjuje wartości X I N które będą używane w momencie tworzenia obiektów. ''__iter __ ()„Metoda zainicjuje zmienną klasową, która będzie przechowywać”wynik„Zmienna obliczeń w każdej iteracji. Wartości X I N zostanie uznane za dane wejściowe od użytkownika. Obiekt klasy 'liczby'jest tworzony z X I N. Następnie wymieniony obiekt iterabalny „ITER_OBJ„jest tworzony, aby nazwać”__Następny__()„Metoda n-1 razy za pomocą 'chwila„pętla do obliczenia wartości XN. W każdej iteracji wartość X zostanie pomnożony przez poprzednią wartość 'wynik' zmienny. Po zakończeniu ''chwila`` Pętla, ''__Następny__()„Metoda zostanie ponownie wywołana, aby wydrukować wartość XN.

„Utwórz klasę, aby obliczyć
x do mocy n za pomocą iteratora
"
klasa x_to_the_power_n:
# Zainicjuj wartość x i n
def __init __ (self, x = 0, n = 0):
samego siebie.x = x
samego siebie.n = n
# Zainicjuj iterabinę
def __iter __ (self):
samego siebie.wynik = 1
powrót do siebie
# Oblicz wartość w każdej iteracji
def __Next __ (ja):
Jeśli ja.n> = 0:
samego siebie.wynik *= self.X
samego siebie.n -= 1
powrót do siebie.wynik
# Weź wartości x i n
x = int (input („Wprowadź wartość x:”))
n = int (input („Wprowadź wartość n:”))
# Utwórz obiekt klasy
numery = x_to_the_power_n (x, n)
# Utwórz iterabin
ITER_OBJ = ITER (liczby)
próbować:
i = 0
podczas gdy ja < n-1):
# Odzyskaj następną wartość za pomocą metody Next ()
Dalej (ITER_OBJ)
I+= 1
Drukuj („\ n %d do mocy %d to %d” %(x, n, iter_obj.__Następny__()))
Z wyjątkiem przerwy:
# Zakończ skrypt, jeśli nie istnieje żadna wartość
print (następny (ITER_OBJ))

Wyjście

Pokazuje to następujące dane wyjściowe 2 jest traktowany jako wartość X I 4 jest traktowany jako wartość N. Więc skrypt obliczył wartość 24 być 16.

Przykład 5: Użycie nieskończonego iteratora niestandardowego

Poniższy skrypt będzie ciągle drukuje liczby, które są podzielne przez 5 z opóźnieniem jednej sekundy, dopóki użytkownik nie naciśnie Ctrl + c Aby wygenerować 'Klawiatura' sygnał. Nieskończoność 'chwila„Pętla jest używana tutaj do utworzenia nieskończonego niestandardowego iteratora. ''czas„Moduł jest importowany na początku skryptu, aby używać”spać()„Metoda opóźnienia każdego wyjścia o sekundę. Numer 5 jest inicjowany do 'num„zmienna jako pierwsza podzielna liczba w skrypcie, a następna liczba jest generowana przez dodanie 5 z poprzednią wartością”num' zmienny.

# Moduł czasu importu
czas importu
"
Utwórz klasę, aby wygenerować liczby
które są podzielne przez 5 w sposób ciągły
"
klasa numer_divisible_by_five:
# Zainicjuj wartość NUM
def __iter __ (self):
samego siebie.num = 5
powrót do siebie
# Oblicz następną liczbę, która jest podzielna przez 5
def __Next __ (ja):
Next_num = self.num
czas.sen (1)
samego siebie.Num += 5
powrót następny_num
# Utwórz obiekt klasy
Obiekt = numer_divisible_by_five ()
# Utwórz obiekt iteracyjny
iTerObject = iter (obiekt)
# Zdefiniuj nieskończoną pętlę
Choć prawda:
próbować:
# Idź na następną iterację
Drukuj (IterObject.__Następny__())
Z wyjątkiem klawiatury
Drukuj („Ctrl+C jest naciśnięty.")
# Zakończ z pętli, gdy Ctrl+C jest naciska
przerwa

Wyjście

Poniższe dane wyjściowe pokazuje, że liczba zaczęła drukować z 5 i ciągle drukowała następne liczby po drugiej z jednym sekundowym czasem trwania. Kiedy użytkownik naciskał Ctrl + c Po wydrukowaniu numeru 60, wiadomość 'Ctrl+C jest wciśnięty.„Został wydrukowany, zanim zakończył skrypt.

Przykład 6: Kontrolowanie niestandardowego nieskończonego iteratora

Poniższy skrypt pokazuje, jak zatrzymać niestandardowy nieskończony iterator po wypełnieniu określonej liczby iteracji. ''__iter __ ()„Metoda klasy zainicjuje wartości”N' I 'wynik„Zmienne klasowe. Skrypt obliczy kwadraty liczb, zaczynając od 1, które są przechowywane w zmiennej N, i wydrukuj wartość kwadratową N aż do wartości N jest większy niż 5. Nieskończona, gdy pętla jest tutaj ogłoszona, aby nazwać '__Następny__()„Metoda do wydrukowania wartości kwadratowej N. Kiedy wartość N osiąga 6, ''Przerwanie„Sygnał wygeneruje, aby zakończyć pętlę.

# Moduł czasu importu
czas importu
"
Utwórz klasę do obliczenia
kwadrat liczby zaczyna się od 1 do
Wartość liczby jest mniejsza niż 6
"
klasa oblicz_powet:
# Zainicjuj wartość NUM
def __iter __ (self):
samego siebie.n = 1
samego siebie.wynik = 0
powrót do siebie
# Oblicz następną liczbę, która jest podzielna przez 5
def __Next __ (ja):
# Sprawdź wartość n jest mniejsza lub równa 5 lub nie
Jeśli ja.N <= 5:
samego siebie.wynik = self.n ** 2
czas.spać (0.5)
samego siebie.n += 1
powrót do siebie.wynik
w przeciwnym razie:
Podnieś przerwanie
# Utwórz obiekt klasy
Object = calculate_power ()
# Utwórz obiekt iteracyjny
iTerObject = iter (obiekt)
# Zdefiniuj nieskończoną pętlę
Choć prawda:
próbować:
# Wybierz następną iterację i wydrukuj wartość kwadratową
wydruku („kwadrat %d to %d” %(iterobject.n, iterObject.__Następny__()))
Z wyjątkiem przerwy:
wydruku.")
# Zakończ z pętli
przerwa

Wyjście

Poniższe wyjście pokazuje, że nieskończony niestandardowy iterator został zakończony, gdy wartość n stała się większa niż 5. Skrypt obliczony i wydrukował wartości kwadratowe wartości liczby od 1 do 5.

Iteracyjne z itertoolami

Python ma wbudowany moduł o nazwie 'IterTools„Można użyć do utworzenia iteratora do iteracji danych za pomocą pętli. Następna sekcja tego artykułu pokazuje, jak używać trzech funkcji w tym module.

IterTools.liczyć()

„Itertools.cd„Funkcja może być używana z”mapa()„Metoda generowania danych sekwencyjnych i z”zamek błyskawiczny()„Metoda dodawania sekwencji za pomocą parametru liczby tej metody. Składnia tej funkcji podano poniżej.

Składnia

IterTools.Count (start = 0, krok = 1)

Tutaj pierwszy parametr ”początek,„służy do zdefiniowania wartości początkowej sekwencji i 0 jest domyślną wartością tego parametru. Drugi parametr ”krok,„służy do ustalenia różnicy między kolejnymi liczbami i 1 jest domyślną wartością tego parametru.

Przykład 7: Użycie funkcji iTerTools

Następujący skrypt obliczy sumę z 0 Do N liczby, gdzie wartość N zostanie zabrany od użytkownika. ''liczyć()„Funkcja jest importowana z”IterTools„Na początku skryptu. ''my_iterator„Obiekt jest inicjowany z”liczyć()„Funkcja, z”początek„Wartość 0 i A”krok„Wartość 1. Następnie ''sum_result„Zmienna jest inicjowana przez pierwszą wartość obiektu iterowalnego. Wartość początkowa jest inicjowana do zmiennej I a numer początkowy jest przechowywany jako znak w zmiennej, liczby, które zostaną użyte do łączenia innych liczb w każdej iteracji. Wartości liczb sekwencyjnych zostaną dodane w każdej iteracji, gdy 'Następny()„Metoda jest wywoływana. Kiedy wartość I staje się większy niż N, Skrypt zakończy się wyświetlaniem wyniku sumy.

„Oblicz następujący skrypt
suma 0 do liczby, która zostanie uznana za dane wejściowe.
"
# Liczba importu
Z liczby importu IterTools
# Tworzy iteralny obiekt Count ()
my_iterator = count (start = 0, krok = 1)
# Przeczytaj pierwszą wartość z iteratora
sum_result = następny (my_iterator)
# Weź wejście liczbowe, aby zakończyć nieskończoność podczas pętli
n = int (input („Wprowadź wartość limitu:”))
# Zainicjuj wartość i i liczby
i = sum_result
numery = f 'i'
# Deklaruj nieskończoną pętlę
Choć prawda:
# Dodaj liczbę w każdej iteracji
sum_result += i
i = następny (my_iterator)
# Zakończ pętlę, jeśli wartość i jest większa niż n
if (i> n):
przerwa
# Dodaj wartość liczby jako ciąg z symbolem „+”
numery += " +" +f 'i' '
# Wydrukuj wartość końcową
drukuj („ %s = %d” %(liczby, sum_result)))

Wyjście

Poniższe dane wyjściowe pokazuje, że liczba 10 jest traktowany jako wejście używane do zakończenia pętli po uruchomieniu skryptu. W tym wyjściu skrypt obliczył sumę od 0 do 10 i wydrukował wyjście, 0+1+2+3+4+5+6+7+8+9+10 = 55.

IterTools.cykl()

Ta funkcja zawiera tylko jeden argument, który może być dowolnym obiektem. Celem tej funkcji jest powtórzenie wartości obiektu po zakończeniu iteracji wszystkich wartości. Tutaj, struny, krotki, listy itp. może być używane jako obiekt. Zwracania obiektów iterowalnych tych funkcji są używane do iterowania każdej wartości obiektu, który będzie używany jako argument za pomocą 'Następny()' metoda. Liczba liczby iternowanych wartości obiektu iterowalnego będzie oparta na liczbie iteracji pętli. Składnia tej funkcji podano poniżej.

Składnia

IterTools.cykl (obiekt)

Przykład 8: Zastosowanie funkcji itertools

''losowy' I 'IterTools„Moduły są importowane na początku skryptu, aby wygenerować liczbę losową i używać”cykl()„Funkcja z”IterTools„Moduł powtarzania danych. Lista trzech liczb losowych jest używana jako argumentcykl()„Funkcja. Imienny obiekt nazwany 'num_list'jest inicjowany przez wartość zwracaną tej funkcji. ''liczyć„zmienna jest inicjowana do 0, a kiedy wartość tej zmiennej staje się 6, ''chwila„Pętla zakończy się. Więc 'chwila„Pętla itera sześć razy, a każda wartość listy powtórzy się tylko raz.

# Importuj moduł losowy
Import losowy
# Importuj moduł iTerTools
importować itertools
# Wygeneruj obiekt iterowalny na podstawie listy trzech liczb losowych
num_list = iTerTools.cykl ([losowe.Randint (1,5), losowe.Randint (10,50), losowy.Randint
(100 500)])
# Zainicjuj licznik
Count = 0
# Iteruj pętlę na 6 razy
When (hrabia != 6):
drukuj („bieżącą liczbę losową to: ' + f' nEx (NUM_LIST) ')
Count+= 1

Wyjście

Poniższe dane wyjściowe pokazuje, że trzy losowe liczby, 3, 17, I 185, zostały wygenerowane jako elementy listy. Pętla jest iterowana sześć razy, a te trzy wartości są powtarzane dla następnych iteracji.

IterTools.powtarzać()

Funkcja „powtórz ()” działa jak nieskończony iterator i może wziąć dwa argumenty. Po pominięciu drugiego argumentu funkcja „powtórz ()” działa jako nieskończony iterator i powtarza wartość nieskończoną liczbę razy. Ta funkcja nie zajmuje pamięci dla każdego powtórzenia. Po prostu tworzy zmienną jeden raz w pamięci i powtarza tę samą zmienną i nieskończoną liczbę razy, gdy tylko jeden argument jest ustawiony dla tej funkcji. Składnia tej funkcji podano poniżej.

Składnia

IterTools.Powtórz (wartość, limit)

Pierwszy argument służy do przyjęcia wartości, która się powtórzy. Drugi argument jest opcjonalny i służy do ustawienia limitu powtórzeń.

Przykład 9: Użyj funkcji modułu iTerTools modułu iTerTools

''IterTools„Moduł jest importowany na początku skryptu, aby użyć”powtarzać()„Funkcja. Wartość ciągu zostanie pobrana od użytkownika do powtórzenia, a wartość liczbowa zostanie pobrana od użytkownika, aby ustawić limit powtórzeń. Wartość zwracana 'powtarzać()„Funkcja zostanie następnie przekonwertowana na listę z”lista()„Metoda i przechowywana w”ListData' zmienny. Wartości ''ListData„Zostanie wydrukowany z”Do' pętla.

# Importuj moduł iTerTools
importować itertools
# Weź wartość wejściową, która się powtórzy
string = input („Wprowadź ciąg:”)
# Weź wartość liczbową, aby powtórzyć
powtórz = int (input („Wprowadź liczbę, aby powtórzyć:”))
# Używanie powtórki () do wielokrotnego dodawania ciągu do listy
ListData = lista (itertools.powtórz (ciąg, powtórz))
# Zainicjuj i
i = 1
drukuj („Wartości listy to: \ n”)
# Iteruj listę za pomocą pętli
dla Val w ListData:
wydrukuj („Lista pozycja %d = %s” %(i, val))
I += 1

Wyjście

Następujące dane wyjściowe pokazuje to 'Pyton„jest traktowany jako wartość ciągu i 3 jest traktowany jako liczba używana do powtórzenia wartości ciągu po uruchomieniu skryptu. Wyjście pokazuje, że ciąg 'Pyton„powtarza się trzy razy.

Wniosek

Pojęcie iteratora i zastosowania różnych rodzajów iteratorów w Pythonie są próbowane wyjaśnieniem bardzo prostymi przykładami w tym artykule. Użytkownicy Python mogą korzystać z wbudowanego iteratora lub utworzyć swój niestandardowy iterator na podstawie wymagań. Ten artykuł pomoże użytkownikom Python dowiedzieć się o metodach stosowanych w iteratorze i o tym. Niektóre zastosowania IterTools W tym artykule wyjaśniono również moduł Pythona, aby poznać więcej szczegółów na temat iteratora w Python.