Krajta

Iterátory v Pythonu

Iterátory v Pythonu
Iterátor je pro Python cenným nástrojem. Je to objekt používaný k iteraci všech prvků kolekce. Iterátor poskytuje přístup k prvkům kontejneru, ale iteraci neprovádí sám. Funguje to jako databázový kurzor a používá se ke čtení seznamu záznamů jeden po druhém. Napříkladprosmyčka, která iteruje hodnoty kontejneru, funguje jako iterátor. Python má mnoho vestavěných iterátorů pro iterovatelné objekty, jako jsou seznamy, n-tice, slovníky atd. Bez těchto iterátorů, 'itertoolsFunkce lze použít k vrácení dalších iterátorů v Pythonu. This article shows how to use the loop as an iterator, custom iterator, infinite iterator, and control infinite iterator in Python 3. Některá použitíitertools'funkce jsou také vysvětleny v poslední části tohoto tutoriálu.

Iterátorové metody

Každý objekt iterátoru obsahuje následující dvě metody.

Tato metoda se používá k inicializaci iterovatelného objektu. Vrácený objekt má metodu '_ _další_ _()'v Pythonu 3.

Tato metoda vrací další hodnotu iterovatelného objektu. Vztah mezi iterátorem a iterovatelným objektem je uveden v následujícím diagramu.

Iterace se smyčkami

Již bylo zmíněno, že „pro‚smyčka volá 'další()'metoda implicitně při iteraci libovolného iterovatelného objektu. Když se pro iteraci iterovatelného objektu použije smyčka,pro‚smyčka volá 'další()„metoda implicitně a“zatímco‚smyčka volá 'další()'nebo'__další__()'metoda výslovně pro čtení další hodnoty iterovatelného objektu. Oba typy smyčky nadále volají tuto metodu, dokudStopIterace'je generován signál.

Příklad 1: Iterace iterovatelných objektů smyčkou „pro“

Následující skript ukazuje použití 'prosmyčky pro iteraci pěti různých iterovatelných objektů. První 'pro'smyčka se používá k iteraci hodnoty řetězce a tisku každého znaku řetězce v každé iteraci. Druhý 'proSmyčka se používá k iteraci obsahu existujícího textového souboru a k tisku každého řádku souboru v každé iteraci. Třetí 'pro'smyčka se používá k iteraci hodnot n-tice. Čtvrtý 'pro'smyčka se používá k iteraci hodnot obsažených v seznamu. Pátý 'pro'smyčka se používá k iteraci hodnot obsažených ve slovníku.

# Iterace řetězce pomocí smyčky for
print ("Iterace řetězce pomocí smyčky")
str = "Python"
pro val v str:
tisk (val)
# Iterace existujícího souboru pomocí smyčky for
print ("\ n \ nČtení souboru řádek po řádku pomocí smyčky for")
pro řádek v otevřeném ("test.txt "):
tisk (řádek, konec = "")
# # Iterace n-tice pomocí smyčky for
print ("\ n \ nTuple Iteration using for loop")
tup = ("Kniha", "Papír", "Tužka", "Pero")
pro val v tup:
tisk (val)
# Iterace seznamu pomocí smyčky for
print ("\ n \ n Iterace seznamu pomocí smyčky for")
listdata = ["Návrhář", "Analytik", "Programátor", "Správce"]
pro val v listdata:
tisk (val)
# Iterace slovníku pomocí smyčky for
print ("\ n \ nRozlišovací iterace pomocí smyčky")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
pro index v dictval:
tisk ("% s dosaženo% d značek"% (index, dictval [index]))

Výstup

Následující výstup ukazuje, že znaky hodnoty řetězce; řádky test.txt soubor; a položky n-tic, seznam a slovník se vytisknou po spuštění skriptu.

Příklad 2: Iterační seznamy se smyčkou „while“

Následující skript ukazuje použití 'zatímcosmyčka pro iteraci seznamu dat. Tady jeiter ()'metoda se používá k inicializaci iterovatelného objektu a'další()'metoda se používá ke čtení další hodnoty iterovatelného objektu. StopIterace signál se používá k ukončení z nekonečnazatímco' smyčka, když pro čtení nezůstala žádná položka ze seznamu.

# Definujte seznam
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Inicializovat iterovatelný objekt
init_iter_object = iter (listdata)
print ("Iterující data seznamu pomocí while smyčky: \ n")
# Deklarujte a nekonečné while smyčky
zatímco je pravda:
Snaž se:
Pro iteraci další hodnoty se používá metoda # next ()
value = next (init_iter_object)
tisk (hodnota)
kromě StopIteration:
# Ukončete smyčku po iteraci všech hodnot
přestávka

Výstup

Následující výstup ukazuje, že každá hodnota seznamu byla vytištěna v každém řádku pomocí 'další()'metoda po spuštění skriptu.

Příklad 3: Iterace n-tice metodou '__next __ ()' a 'while'

V následujícím skriptu oba 'další()' a '__další__()'metody se používají k iteraci hodnot n-tice. 'iter ()‚metoda se používá k vytvoření iterovatelného objektu s názvem 'init_iter.„Tady,“další()'metoda se volá dvakrát pro tisk prvních dvou hodnot n-tice. Dále nekonečnozatímco'smyčka se používá k iteraci zbývajících hodnot n-tice a'StopIterace'signál se používá k ukončení ze smyčky, jako v předchozím příkladu.

# definovat n-tici
animal_tuple = ('Bird', 'Lion', 'Monkey', 'Snake', 'Elephant')
print ("Hodnoty n-tice jsou: \ n")
# Inicializovat iterátorový objekt pomocí iter ()
init_iter = iter (animal_tuple)
# iterace a tisk hodnoty pomocí metody next ()
tisk (další (init_iter))
tisk (další (init_iter))
# Definujte nekonečnou smyčku while
zatímco je pravda:
Snaž se:
# iterace a tisk hodnoty pomocí metody __next __ ()
print (init_iter.__další__())
kromě StopIteration:
# Ukončete smyčku po iteraci všech hodnot
přestávka

Výstup

Následující výstup ukazuje, že po spuštění skriptu, první dvě hodnoty, 'Pták' a 'Lev,'jsou vytištěny s'další()„metoda, zatímco ostatní tři hodnoty,“Opice,"Had,' a 'Slon,'jsou vytištěny s'__další__()„metoda.

Iterace s vlastním iterátorem

Tato část ukazuje, jak lze implementovat různé typy vlastních iterátorů vytvořením tříd. Oba '__iter __ ()„a“__další__()„metody budou implementovány ve třídě a“zatímco'smyčka bude použita k iteraci hodnot iterovatelného objektu.  Další část tohoto článku také ukáže, jak vytvořit nekonečný vlastní iterátor a řídit iteraci.

Příklad 4: Použití jednoduchého vlastního iterátoru

Následující skript umožňuje vypočítat hodnotu Xn pomocí vlastního iterátoru bez použití jakékoli vestavěné funkce Pythonu. Třída s názvem 'x_to_the_power_n'je deklarováno ve skriptu. '__init __ ()'metoda třídy inicializuje hodnoty X a n které budou použity v době vytváření objektu. '__iter __ ()'metoda inicializuje proměnnou třídy, která uloží'výsledek'proměnná výpočtu v každé iteraci. Hodnoty X a n bude bráno jako vstup od uživatele. Objekt třídy 'čísla„je vytvořeno pomocí X a n. Dále iterovatelný objekt s názvem 'iter_obj„je vytvořeno k volání“__další__()„metoda pro n-1 krát pomocí 'zatímco'smyčka pro výpočet hodnoty Xn. V každé iteraci hodnota X se vynásobí předchozí hodnotou 'výsledekproměnná. Po ukončenízatímco‚smyčka '__další__()'bude znovu vyvolána metoda pro tisk hodnoty Xn.

"Vytvořit třídu pro výpočet
x do výkonu n pomocí iterátoru
"
třída x_to_the_power_n:
# Inicializujte hodnotu x a n
def __init __ (self, x = 0, n = 0):
já.x = x
já.n = n
# Inicializovat iterovatelný
def __iter __ (self):
já.výsledek = 1
vrátit se
# Vypočítejte hodnotu v každé iteraci
def __next __ (self):
pokud já.n> = 0:
já.výsledek * = já.X
já.n - = 1
vrátit se.výsledek
# Vezměte hodnoty x a n
x = int (vstup ("Zadejte hodnotu x:"))
n = int (vstup ("Zadejte hodnotu n:"))
# Vytvořte objekt třídy
numbers = x_to_the_power_n (x, n)
# Vytvořte iterovatelný
iter_obj = iter (čísla)
Snaž se:
i = 0
zatímco já < n-1):
# Načíst další hodnotu pomocí metody next ()
další (iter_obj)
i + = 1
print ("\ n% d na výkon% d je% d"% (x, n, iter_obj.__další__()))
kromě StopIteration:
# Ukončete skript, pokud neexistuje žádná hodnota
tisk (další (iter_obj))

Výstup

To ukazuje následující výstup 2 se bere jako hodnota X a 4 se bere jako hodnota n. Skript tedy vypočítal hodnotu 2být 16.

Příklad 5: Použití nekonečného vlastního iterátoru

Následující skript bude nepřetržitě tisknout čísla, která jsou dělitelná 5, se zpožděním jedné sekundy, dokud uživatel nestiskne Ctrl + c vygenerovatPřerušení klávesnicesignál. Nekonečnýzatímco'smyčka se zde používá k vytvoření nekonečného vlastního iterátoru. 'čas'modul je importován na začátek skriptu pro použití'spát()'metoda zpoždění každého výstupu o jednu sekundu. Číslo 5 je inicializováno na 'počet'proměnná jako první dělitelné číslo ve skriptu a další číslo je generováno přidáním 5 s předchozí hodnotou'početproměnná.

# Importovat časový modul
čas importu
"
Vytvořte třídu pro generování čísel
které jsou dělitelné 5 nepřetržitě
"
třída Number_Divisible_by_five:
# Inicializujte hodnotu num
def __iter __ (self):
já.num = 5
vrátit se
# Vypočítejte další číslo, které je dělitelné 5
def __next __ (self):
next_num = já.počet
čas.spánek (1)
já.num + = 5
návrat next_num
# Vytvořte objekt třídy
Object = Number_Divisible_by_five ()
# Vytvořte iterovatelný objekt
iterObject = iter (objekt)
# Definujte nekonečnou smyčku
zatímco je pravda:
Snaž se:
# Přejděte na další iteraci
print (iterObject.__další__())
kromě KeyboardInterrupt:
tisk ("Je stisknuto Ctrl + C.")
# Ukončete smyčku při stisknutí Ctrl + C
přestávka

Výstup

Následující výstup ukazuje, že číslo začalo tisknout od 5 a nepřetržitě tisklo další čísla jeden po druhém s trváním jedné sekundy. Když uživatel stiskl Ctrl + c po vytištění čísla 60, zpráva 'Je stisknuto Ctrl + C.Byl vytištěn před ukončením skriptu.

Příklad 6: Ovládání vlastního nekonečného iterátoru

Následující skript ukazuje, jak zastavit vlastní nekonečný iterátor po dokončení zadaného počtu iterací. '__iter __ ()‚metoda třídy inicializuje hodnoty 'n' a 'výsledekproměnné třídy. Skript vypočítá druhé mocniny čísel, počínaje od 1, které jsou uloženy v proměnné n, a vytiskněte druhou mocninu hodnoty n do hodnoty n je větší než 5. Zde je deklarována nekonečná smyčka while, která volá '__další__()'metoda tisku čtvercové hodnoty n. Když hodnota n dosáhne 6, dále jenStopIterace'signál se vygeneruje k ukončení smyčky.

# Importovat časový modul
čas importu
"
Vytvořte třídu k výpočtu
čtverec čísla začíná od 1 do
hodnota čísla je menší než 6
"
třída spočítat_výkon:
# Inicializujte hodnotu num
def __iter __ (self):
já.n = 1
já.výsledek = 0
vrátit se
# Vypočítejte další číslo, které je dělitelné 5
def __next __ (self):
# Zkontrolujte, zda je hodnota n menší nebo rovna 5 nebo ne
pokud já.n <= 5:
já.výsledek = já.n ** 2
čas.spánek (0.5)
já.n + = 1
vrátit se.výsledek
jiný:
zvýšit StopIteration
# Vytvořte objekt třídy
Objekt = vypočítat_výkon ()
# Vytvořte iterovatelný objekt
iterObject = iter (objekt)
# Definujte nekonečnou smyčku
zatímco je pravda:
Snaž se:
# Přejděte na další iteraci a vytiskněte druhou mocninu
print ("Čtverec% d je% d"% (iterObject.n, iterObject.__další__()))
kromě StopIteration:
print ("\ nUkončeno ze smyčky.")
# Ukončete smyčku
přestávka

Výstup

Následující výstup ukazuje, že nekonečný vlastní iterátor byl ukončen, když se hodnota n stala větší než 5. Skript vypočítal a vytiskl čtvercové hodnoty číselných hodnot od 1 do 5.

Iterace s itertools

Python má vestavěný modul s názvem 'itertools', které lze použít k vytvoření iterátoru pro iteraci dat pomocí smyčky. Další část tohoto článku ukazuje, jak v tomto modulu používat tři funkce.

itertools.počet()

The „itertools.pokr'funkci lze použít s'mapa()„metoda generování sekvenčních dat pomocízip ()'metoda pro přidání sekvencí pomocí parametru count této metody. Syntaxe této funkce je uvedena níže.

Syntax

itertools.count (start = 0, step = 1)

Tady první parametr, 'Start,'se používá k definování počáteční hodnoty sekvence a 0 je výchozí hodnota tohoto parametru. Druhý parametr, 'krok,'se používá k nastavení rozdílu mezi po sobě jdoucími čísly a 1 je výchozí hodnota tohoto parametru.

Příklad 7: Použití funkce count () itertoolů

Následující skript vypočítá součet z 0 na n čísla, kde hodnota n budou převzaty od uživatele. 'počet()'funkce je importována z'itertools„na začátku skriptu. 'můj_iterátor‚objekt je inicializován 'počet()'funkce, s'Start'hodnota 0 a a'krok„hodnota 1. Dále se zobrazísum_resultproměnná je inicializována první hodnotou iterovatelného objektu. Počáteční hodnota je inicializována do proměnné i a počáteční číslo je uloženo jako znak v proměnné, čísla, která budou použita ke kombinaci dalších čísel v každé iteraci. Hodnoty pořadových čísel budou přidány v každé iteraci, kdyždalší()„metoda se nazývá. Když hodnota i se stává větší než n, skript se ukončí zobrazením výsledku součtu.

"Následující skript bude vypočítán
součet 0 k číslu, které bude bráno jako vstup.
"
# Počet importů
z počtu importovaných itertoolů
# Vytvoří iterovatelný objekt count ()
my_iterator = count (start = 0, step = 1)
# Přečtěte první hodnotu z iterátoru
sum_result = next (my_iterator)
# Zadáním čísla ukončete smyčku nekonečného while
n = int (vstup ("Zadejte mezní hodnotu:"))
# Inicializujte hodnotu ia čísel
i = sum_výsledek
numbers = f 'i'
# Deklarujte nekonečnou smyčku
zatímco je pravda:
# Přidejte číslo v každé iteraci
sum_result + = i
i = další (my_iterator)
# Ukončete smyčku, pokud je hodnota i větší než n
if (i> n):
přestávka
# Přidejte číselnou hodnotu jako řetězec se symbolem „+“
čísla + = "+" + f 'i'
# Vytiskněte konečnou hodnotu
tisk ("% s =% d"% (čísla, součet_výsledků))

Výstup

Následující výstup ukazuje, že číslo 10 se bere jako vstup používaný k ukončení smyčky po spuštění skriptu. V tomto výstupu skript vypočítal součet od 0 do 10 a vytiskl výstup, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.cyklus()

Tato funkce obsahuje pouze jeden argument, kterým může být libovolný objekt. Účelem této funkce je opakovat hodnoty objektu po dokončení iterace všech hodnot. Zde řetězce, n-tice, seznamy atd. lze použít jako objekt. Návraty iterovatelného objektu této funkce se používají k iteraci každé hodnoty objektu, která bude použita jako argument pomocí 'další()„metoda. Počet opakování hodnot iterovatelného objektu bude založen na počtu iterací smyčky. Syntaxe této funkce je uvedena níže.

Syntax

itertools.cyklus (objekt)

Příklad 8: Použití funkce cycle () itertoolů

'náhodný' a 'itertools'moduly jsou importovány na začátku skriptu pro vygenerování náhodného čísla a pro použití'cyklus()'funkce z'itertools'modul pro opakování dat. Seznam tří náhodných čísel se používá jako argument 'cyklus()'funkce. Opakovatelný objekt s názvem 'num_list'je inicializováno návratovou hodnotou této funkce. 'počet'proměnná je inicializována na 0, a když se stane hodnota této proměnné 6, dále jenzatímcosmyčka bude ukončena. Takže 'zatímco'smyčka bude iterovat šestkrát a každá hodnota seznamu se bude opakovat pouze jednou.

# Importovat náhodný modul
importovat náhodně
# Importujte modul itertools
import itertools
# Vygenerujte iterovatelný objekt na základě seznamu tří náhodných čísel
num_list = itertools.cyklus ([náhodný.randint (1,5), náhodný.randint (10,50), náhodný.randint
(100 500)])
# Inicializovat počítadlo
count = 0
# Opakujte smyčku šestkrát
while (počítat != 6):
print ('Aktuální náhodné číslo je:' + f 'next (num_list)')
počet + = 1

Výstup

Následující výstup ukazuje, že tři náhodná čísla, 3, 17, a 185, byly vygenerovány jako položky seznamu. Smyčka je iterována šestkrát a tyto tři hodnoty se opakují pro další iterace.

Itertools.opakovat()

Funkce 'repeat ()' funguje jako nekonečný iterátor a může trvat dva argumenty. Když je druhý argument vynechán, funkce 'repeat ()' funguje jako nekonečný iterátor a opakuje hodnotu nekonečně mnohokrát. Tato funkce nezabírá paměť pro každé opakování. Prostě vytvoří proměnnou jednou v paměti a opakuje stejnou proměnnou nekonečně mnohokrát, když je pro tuto funkci nastaven pouze jeden argument. Syntaxe této funkce je uvedena níže.

Syntax

itertools.opakovat (hodnota, limit)

První argument se používá k převzetí hodnoty, která se bude opakovat. Druhý argument je volitelný a slouží k nastavení limitu opakování.

Příklad 9: Použití funkce repeat () modulu itertools

'itertools'modul je importován na začátku skriptu pro použití'opakovat()'funkce. Hodnota řetězce bude převzata od uživatele k opakování a hodnota čísla bude převzata od uživatele k nastavení limitu opakování. Návratová hodnota 'opakovat()'funkce bude poté převedena do seznamu s'seznam()'metoda a uložena v'listDataproměnná. Hodnoty „listData„bude vytištěno s“prosmyčka.

# Importujte modul itertools
import itertools
# Vezměte vstupní hodnotu, která se bude opakovat
string = input ("Zadejte řetězec:")
# Opakujte číselnou hodnotu
repeat = int (vstup ("Zadejte číslo k opakování:"))
# pomocí opakování () k opakovanému přidání řetězce do seznamu
listData = seznam (itertools.opakovat (řetězec, opakovat))
# Inicializovat i
i = 1
print ("Hodnoty seznamu jsou: \ n")
# Iterujte seznam pomocí smyčky for
pro val v listData:
print ("Položka seznamu% d =% s"% (i, val))
i + = 1

Výstup

Následující výstup ukazuje, že 'Krajta'je bráno jako hodnota řetězce a 3 je bráno jako číslo použité k opakování hodnoty řetězce po spuštění skriptu. Výstup ukazuje, že řetězec 'Krajtase opakuje třikrát.

Závěr

Koncept iterátoru a použití různých typů iterátorů v Pythonu se pokusíme vysvětlit pomocí velmi jednoduchých příkladů v tomto článku. Uživatelé Pythonu mohou použít vestavěný iterátor nebo mohou vytvořit svůj vlastní iterátor na základě požadavku. Tento článek pomůže uživatelům pythonu vědět o metodách použitých v iterátoru a o tom, jak tyto metody fungují s libovolnou smyčkou při čtení libovolného iterovatelného objektu. Některá použití itertools modul pythonu jsou také vysvětleny v tomto článku, aby se dozvěděli více podrobností o iterátoru v pythonu.

Ovládejte a spravujte pohyb myši mezi více monitory ve Windows 10
Správce myší se dvěma displeji umožňuje ovládat a konfigurovat pohyb myši mezi více monitory zpomalením jeho pohybů poblíž hranice. Windows 10/8 vám u...
WinMouse vám umožňuje přizpůsobit a vylepšit pohyb ukazatele myši na PC s Windows
Chcete-li vylepšit výchozí funkce ukazatele myši, použijte freeware WinMouse. Přidává další funkce, které vám pomohou vytěžit ze své skromné ​​myši ma...
V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...