Piton

Iterátorok a Pythonban

Iterátorok a Pythonban
Az iterátor értékes eszköz a Python számára. Ez egy objektum, amelyet a gyűjtemény összes elemének iterációjára használnak. Az Iterator hozzáférést biztosít a konténer elemeihez, de önmagában nem hajtja végre az iterációt. Úgy működik, mint egy adatbázis-kurzor, és a rekordlista egyesével történő elolvasására szolgál. Például egy 'mertA konténer értékeit iteráló ciklus iterátorként működik. A Python sok beépített iterátorral rendelkezik iterálható objektumokhoz, például listákhoz, sorrendekhez, szótárakhoz stb. Ezen iterátorok nélkül "itertoolok'függvényekkel más iterátorokat adhatunk vissza a Pythonban. Ez a cikk bemutatja, hogyan kell használni a ciklust iterátorként, egyéni iterátorként, végtelen iterátorként és végtelen iterátor vezérléseként a Python 3-ban. A 'itertoolok'funkciókat a bemutató utolsó részében is megmagyarázzuk.

Iterátor módszerek

Minden iterátor objektum a következő két módszert tartalmazza.

Ezt a módszert használják az iterálható objektum inicializálására. A visszaküldött objektum metódusa '_ _következő_ _()a Python 3-ban.

Ez a módszer az iterálható objektum következő értékét adja vissza. Az iterátor és az iterálható objektum kapcsolatát a következő ábra mutatja.

Hurokkal iterálva

Korábban említettük, hogy amert'loop hívja a'következő()'metódus implicit módon bármely iterálható objektum iterálásakor. Ha egy ciklust használunk egy iterálható objektum iterálásához, akkor a 'mert'loop hívja a'következő()'módszer implicit módon és a'míg'loop hívja a'következő()vagy__következő__()'metódus kifejezetten az iterálható objektum következő értékének beolvasására. Mindkét típusú hurok továbbra is ezt a módszert hívja, amíg a 'StopIteration'jel jön létre.

1. példa: Az iterálható objektumok iterálása a „for” hurokkal

A következő szkript bemutatja a 'mert'hurkok öt különböző iterálható objektum iterálásához. Az első 'mertA 'ciklust a karakterlánc értékének iterálására és a karakterlánc minden egyes karakterének kinyomtatására használják. A második 'mertA 'ciklust egy meglévő szöveges fájl tartalmának iterációjára és az egyes iterációkban található fájl minden sorának kinyomtatására használják. A harmadik 'mert'ciklus a duplák értékeinek iterálására szolgál. A negyedik 'mert'' ciklust használjuk a listában szereplő értékek iterálására. Az ötödik 'mertA 'ciklus a szótárban található értékek iterálására szolgál.

# A húr ismétlése a ciklus használatával
print ("Karakterlánc-ismétlés a hurokhoz")
str = "Python"
for val in str:
nyomtatás (val)
# Meglévő fájl iterálása a ciklus használatával
print ("\ n \ nFájl olvasása soronként a ciklus használatával")
vonalon nyitva ("teszt.txt "):
nyomtatás (vonal, vég = "")
# # Iplál egy duplát a ciklus használatával
print ("\ n \ nTuple Iteration for loop használatával")
tup = ("Könyv", "Papír", "Ceruza", "Toll")
for val in tup:
nyomtatás (val)
# Egy lista ismétlése a ciklus használatával
print ("\ n \ nIteráció felsorolása a ciklushoz")
listdata = ["Tervező", "Elemző", "Programozó", "Rendszergazda"]
val a listdata-ban:
nyomtatás (val)
# Szótár ismétlése ciklus használatával
print ("\ n \ nSzótári ismétlés a ciklushoz")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
indexhez a dictval-ban:
nyomtatás ("% s elért% d jel"% (index, dictval [index]))

Kimenet

A következő kimenet azt mutatja, hogy a karakterlánc értéke; a vonalak teszt.txt fájl; és a nyomtatványok, a lista és a szótár tételei kinyomtatásra kerülnek a szkript futtatása után.

2. példa: A listák iterálása a 'while' hurokkal

A következő parancsfájl a 'míg'hurok az adatok listájának iterálásához. Itt aiter ()'metódust használjuk az iterálható objektum inicializálására, és a'következő()'metódust használjuk az iterálható objektum következő értékének kiolvasására. StopIteration jelet használnak a végtelenről való befejezésre 'míg' ciklus, amikor a lista egyetlen eleme sem maradt olvasásra.

# Definiáljon egy listát
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Inicializálja az iterálható objektumot
init_iter_object = iter (listadata)
print ("A lista adatainak iterálása a while ciklus használatával: \ n")
# Deklarálja és végtelen, míg hurok
míg True:
próbáld ki:
A # next () metódust használjuk a következő érték iterálására
érték = következő (init_iter_object)
nyomtatás (érték)
a StopIteration kivételével:
# Az összes érték iterálása után fejezze be a ciklust
szünet

Kimenet

Az alábbi kimenet azt mutatja, hogy a lista minden értékét minden sorban kinyomtatták a 'következő()'metódus a szkript futtatása után.

3. példa: Tuple iterálása a '__next __ ()' metódussal és a 'loop' alatt

A következő szkriptben mindkettő 'következő()"és"__következő__()'metódusokat használnak a duplák értékeinek iterációjára. A 'iter ()'metódus a' nevű iterálható objektum létrehozására szolgálinit_iter.- Itt van,következő()A 'metódust kétszer hívjuk meg a két első értékének kinyomtatásához. Ezután egy végtelenmíg'ciklus a duplán és aStopIteration'' jelet használunk a hurokról történő befejezésre, mint az előző példában.

# definiál egy duplát
animal_tuple = ('Madár', 'Oroszlán', 'Majom', 'Kígyó', 'Elefánt')
print ("A pár értéke: \ n")
# Inicializálja az iterátor objektumot az iter () használatával
init_iter = iter (állat_tuple)
# iterál és nyomtat értéket a következő () módszerrel
nyomtatás (következő (init_iter))
nyomtatás (következő (init_iter))
# Adjon meg egy végtelen while ciklust
míg True:
próbáld ki:
# iteráljon és nyomtasson értéket a __next __ () módszerrel
nyomtat (init_iter.__következő__())
a StopIteration kivételével:
# Az összes érték iterálása után fejezze be a ciklust
szünet

Kimenet

A következő kimenet azt mutatja, hogy a szkript futtatása után az első két érték, 'Madár"és"Oroszlán,a "következő()'metódus, míg a másik három érték'Majom,"Kígyó,"és"Elefánt,a "__következő__()módszer.

Egyedi iterátorral iterálva

Ez a szakasz bemutatja, hogyan lehet különféle egyedi iterátorokat megvalósítani osztályok létrehozásával. Mind a '__iter __ ()' és a '__következő__()'a módszereket egy osztályban alkalmazzák, és a'míg'ciklust használjuk az iterálható objektum értékeinek iterálására.  A cikk következő része azt is bemutatja, hogyan hozhatunk létre végtelen egyéni iterátort és vezérelhetjük az iterációt.

4. példa: Egyszerű egyedi iterátor használata

A következő szkript lehetővé teszi a (z) értékének kiszámítását xn egyedi iterátor használatával a Python beépített funkcióinak használata nélkül. A 'nevű osztályx_to_thower_n'van deklarálva a forgatókönyvben. A '__benne__()'osztály metódusa inicializálja a x és n amelyet az objektum létrehozása idején fognak használni. A '__iter __ ()'metódus inicializálja az osztály változót, amely tárolja a'eredmény'változása a számításnak minden egyes iterációban. Az értékek x és n a felhasználó bemenetének számít. Az osztály tárgya 'számok'létrehozva x és n. Ezután egy iterálható objektum neve 'iter_obj'a'__következő__()módszer n-1 alkalommal a 'míg'ciklus a. értékének kiszámításához xn. Minden iterációban a x szorozni fogjuk a 'előző értékéveleredmény'változó. Miután megszüntette amíg'hurok, a'__következő__()'metódus újra meghívásra kerül a xn.

Msgstr "Hozzon létre egy osztályt a
x az iterátor segítségével az n teljesítményre
"
class x_to_the_power_n:
# Inicializálja x és n értékét
def __init __ (én, x = 0, n = 0):
maga.x = x
maga.n = n
# Inicializálja az iterálhatót
def __iter __ (saját):
maga.eredmény = 1
visszatérő én
# Számítsa ki az egyes iterációk értékét
def __next __ (self):
ha önmaga.n> = 0:
maga.eredmény * = önmaga.x
maga.n - = 1
visszatérő én.eredmény
# Vegyük x és n értékét
x = int (input ("Írja be az x értékét:"))
n = int (input ("Adja meg n értékét:"))
# Hozzon létre egy objektumot az osztályból
számok = x_ a_teljesítmény_n (x, n)
# Hozzon létre iterable-t
iter_obj = iter (számok)
próbáld ki:
i = 0
miközben én < n-1):
# Szerezze vissza a következő értéket a következő () módszerrel
következő (iter_obj)
i + = 1
print ("\ n% d a% d teljesítményre% d"% d "% (x, n, iter_obj.__következő__()))
a StopIteration kivételével:
# Szüntesse meg a parancsfájlt, ha nincs érték
nyomtatás (következő (iter_obj))

Kimenet

A következő kimenet azt mutatja 2 értékének vesszük x és 4 értékének vesszük n. Tehát a szkript kiszámította az értékét 2lenni 16.

5. példa: Végtelen egyedi iterátor használata

Az alábbi szkript folyamatosan nyomtatja az 5-tel osztható számokat egy másodperces késleltetéssel, amíg a felhasználó megnyomja Ctrl + c generálni a 'Billentyűzet megszakítása'jel. A végtelen 'mígA 'hurok itt egy végtelen egyedi iterátor létrehozására szolgál. A 'idő'' modult a szkript elejére importáljuk a 'alvás()'módszer az egyes kimenetek egy másodperces késleltetésére. Az 5. számot a 'szám'változó, mint az első osztható szám a szkriptben, és a következő számot úgy állítják elő, hogy 5-öt hozzáadunk a' előző értékéhez 'szám'változó.

# Időmodul importálása
import idő
"
Hozzon létre egy osztályt a számok előállításához
amelyek folyamatosan oszthatók 5-tel
"
class Number_Divisible_by_five:
# Inicializálja a szám értékét
def __iter __ (saját):
maga.szám = 5
visszatérő én
# Számolja ki a következő számot, amely osztható 5-tel
def __next __ (self):
következő_szám = önmaga.szám
idő.alvás (1)
maga.num + = 5
return next_num
# Hozzon létre egy objektumot az osztályból
Object = Number_Divisible_by_five ()
# Hozzon létre iterálható objektumot
iterObject = iter (objektum)
# Definiáljon végtelen ciklust
míg True:
próbáld ki:
# Menjen a következő iterációra
print (iterObject.__következő__())
kivéve a KeyboardInterrupt:
print ("a Ctrl + C megnyomásával.")
# Vége a ciklusból, amikor a Ctrl + C billentyűt lenyomja
szünet

Kimenet

Az alábbi kimenet azt mutatja, hogy a szám nyomtatása 5-től kezdődött, és a következő számokat folyamatosan nyomtatta egymás után, egy másodperces időtartammal. Amikor a felhasználó megnyomta Ctrl + c a szám kinyomtatása után 60, az üzenet 'A Ctrl + C billentyűkombinációt megnyomja.”, mielőtt leállítottuk volna a szkriptet.

6. példa: Egyedi végtelen iterátor vezérlése

A következő szkript bemutatja, hogyan állíthatjuk le az egyéni végtelen iterátort meghatározott számú iteráció befejezése után. A '__iter __ ()'az osztály metódusa inicializálja a'n"és"eredmény'osztályváltozók. A szkript kiszámítja a számok négyzetét, kezdve 1, amelyeket a változó tárol n, és kinyomtatja a négyzet értékét n értékéig n nagyobb, mint 5. Itt egy végtelen hosszúságú ciklust jelentenek be a__következő__()metódus a négyzet értékének kinyomtatására n. Amikor az értéke n elér 6, a 'StopIteration'jel jön létre a hurok befejezéséhez.

# Időmodul importálása
import idő
"
Hozzon létre egy osztályt a számításhoz
a szám négyzete 1-től kezdődik
a szám értéke kevesebb, mint 6
"
osztály calc_power:
# Inicializálja a szám értékét
def __iter __ (saját):
maga.n = 1
maga.eredmény = 0
visszatérő én
# Számolja ki a következő számot, amely osztható 5-tel
def __next __ (self):
# Ellenőrizze, hogy n értéke kisebb-e vagy egyenlő-e 5-vel, vagy sem
ha önmaga.n <= 5:
maga.eredmény = önmaga.n ** 2
idő.alvás (0.5)
maga.n + = 1
visszatérő én.eredmény
más:
emelje fel a StopIteration-t
# Hozzon létre egy objektumot az osztályból
Objektum = teljesítmény kiszámítása ()
# Hozzon létre iterálható objektumot
iterObject = iter (objektum)
# Definiáljon végtelen ciklust
míg True:
próbáld ki:
# Menjen a következő iterációra, és nyomtassa ki a négyzet értékét
print ("% d négyzete% d"% (iterObject.n, iterObject.__következő__()))
a StopIteration kivételével:
print ("\ nA ciklustól végződik.")
# Vége a ciklusból
szünet

Kimenet

A következő kimenet azt mutatja, hogy a végtelen egyéni iterátor akkor szűnt meg, amikor az n értéke 5-nél nagyobb lett. A szkript kiszámította és kinyomtatta a számértékek négyzetértékeit 1-től 5-ig.

Iterolokkal iterálva

A Pythonnak van egy beépített modulja, amelynek neve:itertoolok', amellyel létrehozhatunk egy iterátort az adatok iterálásához egy hurok segítségével. A cikk következő szakasza bemutatja a modul három funkciójának használatát.

itertoolok.számol()

A 'itertoolok.folytatás'függvény használható a'térkép()'módszer szekvenciális adatok előállítására és a'postai irányítószám()'metódus szekvenciák hozzáadásához a módszer count paraméterének felhasználásával. Ennek a függvénynek a szintaxisa az alábbiakban található.

Szintaxis

itertoolok.számlálás (kezdet = 0, lépés = 1)

Itt az első paraméter, 'Rajt,'a szekvencia kezdőértékének meghatározására szolgál, és 0 a paraméter alapértelmezett értéke. A második paraméter, 'lépés,'az egymást követő számok közötti különbség beállítására szolgál, és 1 a paraméter alapértelmezett értéke.

7. példa: A count () használata Az itertoolok funkciója

A következő szkript kiszámítja az összeget 0 nak nek n számok, ahol az értéke n a felhasználótól veszik át. A 'számol()'függvény importálva innen:'itertoolok'a forgatókönyv elején. A 'my_iterator'az objektum a'számol()'függvény, egy'Rajt'0 és a értéke'lépés'értéke 1. Ezután a 'összeg_eredmény'változót az iterálható objektum első értéke inicializálja. A kezdő értéket inicializálják a változóra én és a kezdő szám karakterként van tárolva a változóban, azok a számok, amelyeket az egyes iterációkban más számok egyesítésére használunk. A szekvenciális értékek minden iterációban hozzáadódnak, amikor akövetkező()'metódust hívjuk. Amikor az értéke én nagyobb lesz, mint n, a szkript az összeg eredményének megjelenítésével leáll.

Msgstr "A következő szkript kiszámítja
0 összege a bemenetként figyelembe vett számhoz.
"
# Importszám
itertoolokból importszám
# Iterálható objektumot hoz létre a számlálásból ()
my_iterator = számlálás (kezdet = 0, lépés = 1)
# Olvassa el az első értéket az iterátorból
összeg_eredmény = következő (saját_iterátor)
# Vegyen be egy számbevitelt a végtelen, míg a hurok befejezéséhez
n = int (input ("Adja meg a határértéket:"))
# Inicializálja az i és a számok értékét
i = összeg_eredmény
számok = f 'i'
# Végtelen hurok deklarálása
míg True:
# Adja hozzá a számot minden egyes iterációhoz
összeg_eredmény + = i
i = következő (my_iterator)
# Szüntesse meg a ciklust, ha i értéke nagyobb, mint n
ha (i> n):
szünet
# Adja hozzá a számértéket karakterláncként, a „+” szimbólummal
számok + = "+" + f 'i'
# Nyomtassa ki a végső értéket
nyomtatás ("% s =% d"% (számok, összeg_eredmény))

Kimenet

A következő kimenet azt mutatja, hogy a szám 10 a ciklus befejezéséhez használt bemenetnek számít a szkript futtatása után. Ebben a kimenetben a szkript kiszámította az összeget 0 és 10 között, és kinyomtatta a kimenetet, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.ciklus()

Ez a függvény csak egy argumentumot tartalmaz, amely bármilyen objektum lehet. Ennek a függvénynek a célja az objektum értékeinek megismétlése az összes érték iterációjának befejezése után. Itt karakterláncok, tömbök, listák stb. objektumként használható. Ennek a függvénynek az iterálható objektumvisszaadásait használják az objektum minden értékének iterációjára, amelyet argumentumként fognak használni a 'következő()módszer. Az iterálható objektum értékeinek iterációjának száma a ciklus iterációinak számán alapul. Ennek a függvénynek a szintaxisa az alábbiakban található.

Szintaxis

itertoolok.ciklus (objektum)

8. példa: A ciklus () használata Az itertoolok funkciója

A 'véletlen"és"itertoolok'A modulokat a szkript elején importálják, hogy véletlenszerű számot generáljanak és a'ciklus()'függvény a'itertoolok'modul az adatok megismétléséhez. Három véletlen szám felsorolását használják a 'ciklus()'funkció. A 'nevű iterálható objektumnum_list'a függvény visszatérési értéke inicializálja. A 'számol'változót inicializáljuk 0, és amikor ennek a változónak az értéke válik 6, a 'míg'hurok véget ér. Így a 'mígA 'ciklus hatszor fog ismétlődni, és a lista minden értéke csak egyszer fog ismétlődni.

# Véletlen modul importálása
véletlenszerű importálás
# Itertools modul importálása
importálja az itertoolokat
# Készítsen iterálható objektumot a három véletlenszerű szám listája alapján
num_list = itertoolok.ciklus ([véletlenszerű.randint (1,5), véletlenszerű.randint (10,50), véletlenszerű.randint
(100 500)])
# Inicializálja a számlálót
szám = 0
# Hatszor ismétlem a ciklust
míg (gróf != 6):
nyomtatás ('Az aktuális véletlenszám:' + f 'következő (szám_lista)')
szám + = 1

Kimenet

A következő kimenet azt mutatja, hogy három véletlenszerű szám, 3, 17, és 185, listaelemként lettek létrehozva. A ciklust hatszor iterálják, és ez a három érték megismétlődik a következő iterációknál.

Itertools.ismétlés()

A 'repeat ()' függvény végtelen iterátorként működik, és két argumentumra képes. A második argumentum elhagyása esetén az 'repeat ()' funkció végtelen iterátorként működik és végtelen sokszor megismétli az értéket. Ez a funkció nem foglal el memóriát minden egyes ismétlésnél. Csak egyszer hozza létre a változót a memóriában, és végtelen sokszor megismétli ugyanazt a változót, amikor csak egy argumentum van beállítva ehhez a függvényhez. Ennek a függvénynek a szintaxisa az alábbiakban található.

Szintaxis

itertoolok.ismétlés (érték, határ)

Az első argumentum az ismétlődő érték felvételére szolgál. A második argumentum nem kötelező, és az ismétlések határának beállítására szolgál.

9. példa: Az ismétlődő () funkció használata az itertools modulon

A 'itertoolok'a modul a parancsfájl elején importálódik a'ismétlés()'funkció. Egy karakterlánc értéket veszünk el a felhasználótól az ismétléshez, és egy számértéket veszünk a felhasználótól az ismétlési határ beállításához. A. Visszatérő értéke 'ismétlés()A 'függvény ekkor listává lesz konvertálva a'lista()"módszer és a"listData'változó. A 'listData"a"mert'hurok.

# Itertools modul importálása
importálja az itertoolokat
# Vegyük az ismétlődő bemeneti értéket
string = input ("Írjon be egy karakterláncot:")
# Ismételje meg a számértéket
ismétlés = int (input ("Írja be az ismételni kívánt számot:"))
# a repeat () használatával ismételten hozzáadhatja a karakterláncot egy listához
listData = lista (itertoolok.ismétlés (karakterlánc, ismétlés))
# Inicializálja i
i = 1
print ("A lista értékei: \ n")
# Iterálja a listát a ciklus használatával
for val in listData:
nyomtatás ("% d =% s listaelem"% (i, val))
i + = 1

Kimenet

A következő kimenet azt mutatja, hogy 'Piton'karakterlánc értékét veszi fel, és 3 a sztring értékének a szkript futtatása után történő megismételésére használt szám. A kimenet azt mutatja, hogy a 'Piton'háromszor ismétlődik.

Következtetés

Az iterátor fogalmát és a különböző típusú iterátorok használatát a Pythonban a cikk nagyon egyszerű példáival próbáljuk megmagyarázni. A Python-felhasználók használhatnak beépített iterátort, vagy a követelmény alapján létrehozhatják egyéni iterátorukat. Ez a cikk segít a python felhasználóknak megismerni az iterátorban alkalmazott módszereket és azt, hogy ezek a módszerek hogyan működnek bármely hurokkal, hogy elolvashassanak minden iterálható objektumot. A itertoolok A python moduljának magyarázatát ebben a cikkben ismertetjük, hogy a pythonban található iterátor további részleteit megismerjük.

A top 5 ergonómikus számítógépes egértermék Linuxhoz
Hosszan tartó számítógép-használat okoz-e fájdalmat a csuklóján vagy az ujjain?? Merev ízületek szenvednek, és folyamatosan kezet kell rázniuk? Égő fá...
Az egér és az érintőpad beállításainak módosítása az Xinput használatával Linux alatt
A legtöbb Linux disztribúció alapértelmezés szerint „libinput” könyvtárral szállítja a rendszer bemeneti eseményeit. Feldolgozhatja a Wayland és az X ...
Az X-Mouse Button Control segítségével az egér gombjait másképp alakíthatja át a különböző szoftvereknél
Lehet, hogy szüksége van egy eszközre, amely megváltoztathatja az egér vezérlését minden használt alkalmazással. Ebben az esetben kipróbálhatja az úgy...