O funkciji zadrge
Kot smo že omenili, se funkcija "zip" uporablja za ustvarjanje parov iz elementov več ponovljivih predmetov. Za razumevanje osnovne sintakse in uporabe funkcije zip si oglejte spodnji primer:
list1 = ["a", "b", "c"]list2 = ["jabolko", "krogla", "mačka"]
stisnjeno = zip (seznam1, seznam2)
natisni (seznam (stisnjen))
Prva dva stavka v zgornjem vzorčnem kodu definirata dva seznama, ki vsebujeta nekatere elemente. Nato se funkcija „zip“ uporablja tako, da kot argumenta posredujeta spremenljivki „list1“ in „list2“. To je glavna sintaksa funkcije "zip". Kot argumente, katerih elemente želite združiti, morate le posredovati sezname ali druge veljavne urejene iterable. Nazadnje se izjava za tiskanje uporablja za izpis spremenljivke "stisnjeno". Po zagonu zgoraj omenjenega vzorca kode bi morali dobiti naslednji izhod:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]Upoštevajte, da funkcija »zip« vrne predmet vrste »zip« in ne seznama. Pretvoriti ga morate v iterabilno vrsto, kot je prikazano v zgornji izjavi za tiskanje.
Preprosto povedano, funkcija »zip« pobere elemente istega indeksa z dveh seznamov in jih združi kot par v naboru. Torej je 0. element iz "list1" kombiniran z 0. elementom "list2", 1. element iz "list1" je kombiniran s 1. elementom "list2" itd. Funkcija zip se premika od leve proti desni in nabor, ki vsebuje seznanjene elemente, ima enak indeks kot elementi, shranjeni v njih.
Uporaba stiskalnice, kadar iterables nimajo enakega števila elementov
V zgoraj navedenem primeru imata oba seznama enako število elementov. V primeru, da imate opravka s kodo, pri kateri oba seznama nimata enakega števila elementov, se funkcija »zip« ustavi pri zadnjem elementu seznama z najmanjšim številom elementov.
V spodnjem primeru se bo funkcija “zip” ustavila pri elementu “c”, ne glede na to, da ima “list2” še en element.
list1 = ["a", "b", "c"]list2 = ["jabolko", "žoga", "mačka", "lutka"]
stisnjeno = zip (seznam1, seznam2)
natisni (seznam (stisnjen))
Po zagonu zgoraj omenjenega vzorca kode bi morali dobiti naslednji izhod:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]Ko uporabljate funkcijo zadrge, lahko uporabite več kot dve iterables
Običajno se funkcija "zip" uporablja za primerjavo dveh iterabilnih predmetov. Vendar lahko funkciji “zip” kot argumente posredujete poljubno število ponovljivih elementov. Še vedno bo veljalo načelo ustavitve pri zadnjem elementu najkrajšega seznama.
list1 = ["a", "b", "c"]list2 = ["jabolko", "žoga", "mačka", "lutka"]
list3 = ["5", "3"]
stisnjeno = zip (seznam1, seznam2, seznam3)
natisni (seznam (stisnjen))
Po zagonu zgoraj omenjenega vzorca kode bi morali kot rezultat dobiti naslednji izhod:
[('a', 'apple', '5'), ('b', 'ball', '3')]Ustvarjanje posameznih seznamov iz predmeta vrste Zip
Če že imate »zip« objekt, ga lahko uporabite za ponovno naselitev posameznih seznamov, ki so bili prej uporabljeni, ko je bila na njih prvič uporabljena funkcija zip.
list1 = ["a", "b", "c"]list2 = ["jabolko", "žoga", "mačka", "lutka"]
list3 = ["5", "3"]
stisnjeno = zip (seznam1, seznam2, seznam3)
l1, l2, l3 = zadrga (* stisnjena)
tiskanje (seznam (l1), seznam (l2), seznam (l3))
Po zagonu zgoraj omenjenega vzorca kode bi morali kot rezultat dobiti naslednji izhod:
['a', 'b'] ['jabolko', 'kroglica'] ['5', '3']V zgornjem vzorčnem kodu se objekt "zip" izprazni z uporabo operatorja "*". Izpuščeni rezultati se nato pošljejo v drugo funkcijo klica v zip, ki ustvari izvirne sezname. Upoštevajte, da morda ne boste dobili vseh elementov nazaj na prvotnih seznamih, če so bili prvič ustvarjeni predmeti »zip« z neenako dolžino.
Uporaba zadrge, ko želite ohraniti elemente iz najdaljše ponovljive
V več zgornjih primerih ste morda opazili, da se funkcija "zip" privzeto ustavi pri zadnjem elementu najkrajšega iterabila. Kaj pa, če želite, da se še naprej ponavlja, dokler ne doseže zadnjega elementa najdaljšega ponavljanja?
V takem primeru boste morali uporabiti metodo “zip_longest ()” iz Pythonovega modula “itertools”. Deluje enako kot funkcija "zip", z eno majhno razliko, da se ustavi pri zadnjem elementu najdaljšega iterabilnega tipa.
iz itertools uvozi zip_longestlist1 = ["a", "b", "c"]
list2 = ["jabolko", "žoga", "mačka", "lutka"]
list3 = ["5", "3"]
stisnjeno = zip_longest (seznam1, seznam2, seznam3)
natisni (seznam (stisnjen))
Po zagonu zgoraj omenjenega vzorca kode bi morali kot rezultat dobiti naslednji izhod:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'lutka', None) ]Manjkajoče vrednosti se naselijo kot predmeti tipa »Brez«. Lahko tudi vnesete lastno vrednost za zapolnitev, tako da posredujete dodaten argument »fillvalue« v metodo »zip_longest«.
iz itertools uvozi zip_longestlist1 = ["a", "b", "c"]
list2 = ["jabolko", "žoga", "mačka", "lutka"]
list3 = ["5", "3"]
stisnjeno = zip_longest (seznam1, seznam2, seznam3, fillvalue = "moja_vrednost")
natisni (seznam (stisnjen))
Po zagonu zgoraj omenjenega vzorca kode bi morali kot rezultat dobiti naslednji izhod:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'lutka ',' moja_vrednost ')]Zaključek
Zip funkcijo lahko posnemate z uporabo nekaterih zank in pogojev. Vendar pa pomaga pri urejanju in čistejši kodi z odstranjevanjem nepotrebnih podrobnosti in ponavljajočih se izjav.