A Zip funkcióról
Mint korábban említettük, a „zip” függvény segítségével párokat hozhatunk létre több iterálható objektum elemeiből. Vegye figyelembe az alábbi példát a zip függvény alapvető szintaxisának és használatának megértéséhez:
list1 = ["a", "b", "c"]list2 = ["alma", "labda", "macska"]
zip = zip (lista1, lista2)
nyomtatás (lista (cipzáras))
A fenti kódminta első két állítása két, néhány elemet tartalmazó listát határoz meg. Ezután a „zip” függvényt a „list1” és „list2” változók argumentumként történő továbbításával használják. Ez a „zip” funkció fő szintaxisa. Csak azokat a listákat vagy más érvényes rendezett iterable-eket kell átadni argumentumként, amelyek elemeit kombinálni szeretné. Végül a nyomtatási utasítással kapjuk meg a „zip” változó kimenetét. A fent említett kódminta futtatása után a következő kimenetet kell kapnia:
[('a', 'alma'), ('b', 'labda'), ('c', 'macska')]Vegye figyelembe, hogy a „zip” függvény egy „zip” típusú objektumot ad vissza, nem pedig listát. Meg kell konvertálni iterálható típusra, amint az a fenti nyomtatási utasításban látható.
Egyszerűbben fogalmazva, a „zip” függvény ugyanazon index elemeit veszi fel két listáról, és párosítja őket egy párban. Tehát a „list1” 0. elemét a „list2” 0. elemével, a „list1” 1. elemét a „list2” 1. elemével és így tovább. A zip funkció balról jobbra mozog, és a párosított elemeket tartalmazó index indexe megegyezik a bennük tárolt elemekkel.
A Zip használata, ha az Iterables nem azonos számú elemet tartalmaz
A fenti példában mindkét listának azonos számú eleme van. Abban az esetben, ha olyan kóddal van dolgod, ahol mindkét lista nem azonos elemszámmal rendelkezik, a „zip” funkció a lista utolsó eleménél fog megállni, ahol a legkisebb az elemszám.
Az alábbi példában a „zip” függvény leáll a „c” elemnél, függetlenül attól, hogy a „list2” még egy elemet tartalmaz.
list1 = ["a", "b", "c"]list2 = ["alma", "labda", "macska", "baba"]
zip = zip (lista1, lista2)
nyomtatás (lista (cipzáras))
A fent említett kódminta futtatása után a következő kimenetet kell kapnia:
[('a', 'alma'), ('b', 'labda'), ('c', 'macska')]A Zip funkció használatakor kettőnél több iterable használható
Általában a „zip” függvény két iterálható objektum összehasonlítására szolgál. Bármennyi iterable-t átadhat argumentumként a „zip” függvénynek. A legrövidebb lista utolsó eleménél való megállás elve továbbra is alkalmazandó.
list1 = ["a", "b", "c"]list2 = ["alma", "labda", "macska", "baba"]
list3 = ["5", "3"]
zip = zip (lista1, lista2, lista3)
nyomtatás (lista (cipzáras))
A fent említett kódminta futtatása után a következő kimenetet kell kapnia ennek eredményeként:
[('a', 'alma', '5'), ('b', 'labda', '3')]Egyedi listák létrehozása egy zip típusú objektumból
Ha már rendelkezik „zip” objektummal, akkor újratöltheti azokat az egyedi listákat, amelyeket korábban a zip függvény első hívásakor használtak.
list1 = ["a", "b", "c"]list2 = ["alma", "labda", "macska", "baba"]
list3 = ["5", "3"]
zip = zip (lista1, lista2, lista3)
l1, l2, l3 = cipzár (* cipzáras)
nyomtatás (lista (l1), lista (l2), lista (l3))
A fent említett kódminta futtatása után a következő kimenetet kell kapnia ennek eredményeként:
['a', 'b'] ['alma', 'labda'] ['5', '3']A fenti kódmintában a „zip” objektum leeresztése a „*” operátor segítségével történik. A leeresztett eredményeket ezután egy másik zip-hívás funkcióba vezetik, amely eredeti listákat hoz létre. Vegye figyelembe, hogy előfordulhat, hogy nem minden elem kerül vissza az eredeti listákba, ha egyenlőtlen hosszúságú listákat használtak a „zip” objektum első létrehozásakor.
A Zip használata, ha meg akarja tartani az elemeket a leghosszabb iterálhatóságtól
Több fenti példában észrevehette, hogy a „zip” funkció alapértelmezés szerint a legrövidebb időn belül iterálható utolsó elemnél áll meg. Mi van, ha azt akarja, hogy folytassa az iterációt, amíg el nem éri a leghosszabb iterálható érték utolsó elemét?
Ilyen esetben a „zip_longest ()” metódust kell használnia a Python „itertools” moduljából. Ugyanúgy működik, mint a „zip” funkció, egy apró különbséggel, hogy a leghosszabb iterálható típus utolsó eleménél áll meg.
az itertoolokból importálja a zip_longest-etlist1 = ["a", "b", "c"]
list2 = ["alma", "labda", "macska", "baba"]
list3 = ["5", "3"]
zip = zip_longest (lista1, lista2, lista3)
nyomtatás (lista (cipzáras))
A fent említett kódminta futtatása után a következő kimenetet kell kapnia ennek eredményeként:
[('a', 'alma', '5'), ('b', 'labda', '3'), ('c', 'macska', Nincs), (Nincs, 'baba', Nincs) ]A hiányzó értékek „Nincs” típusú objektumként kerülnek feltöltésre. Azt is megadhatja, hogy kitöltse saját értékét, ha egy extra „fillvalue” argumentumot továbbít a „zip_longest” metódusra.
az itertoolokból importálja a zip_longest-etlist1 = ["a", "b", "c"]
list2 = ["alma", "labda", "macska", "baba"]
list3 = ["5", "3"]
zipped = zip_longest (lista1, lista2, lista3, fillvalue = "my_value")
nyomtatás (lista (cipzáras))
A fent említett kódminta futtatása után a következő kimenetet kell kapnia ennek eredményeként:
[('a', 'alma', '5'), ('b', 'labda', '3'), ('c', 'macska', 'én_értékem'), ('én_értékem', 'baba' ',' my_value ')]Következtetés
A zip függvény emulálható néhány ciklus és feltétel utasítás segítségével. Azonban segít a kód rendszerezettségének és tisztaságának megőrzésében azáltal, hogy eltávolítja a felesleges részletességet és az ismétlődő állításokat.