Hogyan készítsünk olyan iterátort, amely iterálható objektumok elemeit váltakozva összefésülve szolgáltatja?

A feladat tehát az, hogy ha van pl. három karakterláncunk ‘ABC’, ‘DEF’, ‘GHI’, akkor az iterátorból a következő sorozat legyen kinyerhető: ‘A’, ‘D’, ‘G’, ‘B’, ‘E’, ‘H’, ‘C’, ‘F’, ‘I’.

A feladat több módon is megoldható. Ezekben a közös elv, hogy először is előállítjuk az iterálható objektumok iterátorait az iter() beépített függvénnyel, hogy utána ezekből tudjuk egyenként kikérni az értékeiket. Az így kapott iterátorokat eltároljuk olyan sorrendben, ahogy a bemenő sorozatok vannak, hogy sorban egymás után periodikusan fel tudjuk őket kínálni a váltakozó elemkikéréshez. Létrehozzuk a ciklikus elemkinyerés és értékvisszaadás szerkezetét. A megvalósítási módok valójában ez utóbbi részben térnek el.

Az alábbiakban néhány lehetséges implementációt mutatunk, amelyekhez fűzött kommentek segítik a megértést. Az első egy iterátorosztályt definiál, a következő kettő egy-egy generátorfüggvényt, és végül az utolsó egy olyan függvényt, amely egy iterátorral tér vissza. Látható, hogy ez utóbbi a legegyszerűbb szerkezetű megvalósítás.

A változatok többségében a szabványos könyvtár itertools moduljának lehetőségeit használtuk ki. Általánosságban is igaz, hogy ha iterátorok előállítása a feladat, akkor érdemes az itertools modul kínálatát megvizsgálni, mert használatával jelentősen leegyszerűsödhet a megoldást nyújtó kód megírása.

A Python tudásépítés lépésről lépésre című e-könyvben az itertools modulról részletesen a „Speciális iterátorok” fejezetben olvashatunk számos példával segítve a megértést és használatot.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.