Tietoja Zip-toiminnosta
Kuten aiemmin todettiin, “zip” -toimintoa käytetään luomaan pareja useiden iteroitavien objektien elementeistä. Harkitse alla olevaa esimerkkiä ymmärtääksesi zip-toiminnon perussyntaksin ja käytön:
list1 = ["a", "b", "c"]list2 = ["omena", "pallo", "kissa"]
zip = zip (luettelo1, luettelo2)
tulosta (luettelo (pakattu))
Yllä olevan koodinäytteen kaksi ensimmäistä lausetta määrittelevät kaksi luetteloa, jotka sisältävät joitain elementtejä. Seuraavaksi zip-funktiota käytetään välittämällä argumentit ”list1” ja “list2” muuttujat. Tämä on "zip" -toiminnon pääsyntaksi. Sinun tarvitsee vain välittää luettelot tai muut voimassa olevat järjestetyt iterable-argumentit, joiden elementit haluat yhdistää. Viimeiseksi tulostuslauseketta käytetään "zipped" -muuttujan tuloksen saamiseen. Kun olet suorittanut yllä mainitun koodinäytteen, sinun pitäisi saada seuraava lähtö:
[('a', 'omena'), ('b', 'pallo'), ('c', 'kissa')]Huomaa, että "zip" -toiminto palauttaa "zip" -tyyppisen objektin eikä luetteloa. Sinun on muunnettava se iteroitavaksi tyypiksi, kuten yllä olevassa tulostuslausekkeessa on esitetty.
Yksinkertaisesti sanottuna "zip" -toiminto poimii saman hakemiston elementit kahdesta luettelosta ja yhdistää ne pariksi tuplana. Joten "list1": n 0. elementti yhdistetään "list2": n 0. elementtiin, "list1": n ensimmäinen elementti "list2": n ensimmäiseen elementtiin ja niin edelleen. Zip-toiminto liikkuu vasemmalta oikealle ja pariksi liitettyjä elementtejä sisältävällä sarjalla on sama hakemisto kuin niihin tallennetuilla elementeillä.
Zipin käyttäminen, kun itterableilla ei ole yhtä monta elementtiä
Edellä mainitussa esimerkissä molemmilla luetteloilla on sama määrä elementtejä. Jos kyseessä on jokin koodi, jossa molemmissa luetteloissa ei ole sama määrä elementtejä, "zip" -toiminto pysähtyy luettelon viimeiseen elementtiin, jossa on pienin määrä elementtejä.
Alla olevassa esimerkissä "zip" -toiminto pysähtyy "c" -elementtiin riippumatta siitä, onko "list2": lla vielä yksi elementti.
list1 = ["a", "b", "c"]list2 = ["omena", "pallo", "kissa", "nukke"]
zip = zip (luettelo1, luettelo2)
tulosta (luettelo (pakattu))
Kun olet suorittanut yllä mainitun koodinäytteen, sinun pitäisi saada seuraava lähtö:
[('a', 'omena'), ('b', 'pallo'), ('c', 'kissa')]Voit käyttää enemmän kuin kahta steriiliä käytettäessä Zip-toimintoa
Yleensä “zip” -toimintoa käytetään kahden iteroitavan objektin vertaamiseen. Voit kuitenkin välittää minkä tahansa määrän iterableja argumentteina "zip" -funktiolle. Periaatetta pysähtyä lyhimmän luettelon viimeiseen kohtaan sovelletaan edelleen.
list1 = ["a", "b", "c"]list2 = ["omena", "pallo", "kissa", "nukke"]
list3 = ["5", "3"]
zip = zip (luettelo1, luettelo2, luettelo3)
tulosta (luettelo (pakattu))
Suoritettuasi yllä mainitun koodinäytteen sinun pitäisi saada seuraava tulos tuloksena:
[('a', 'omena', '5'), ('b', 'pallo', '3')]Yksittäisten luetteloiden luominen Zip Type -objektista
Jos sinulla on jo "zip" -objekti, voit käyttää sitä uudelleen yksittäisten luetteloiden uudelleenkäyttöön, joita käytettiin aiemmin zip-toiminnon ensimmäisen kutsumisen yhteydessä.
list1 = ["a", "b", "c"]list2 = ["omena", "pallo", "kissa", "nukke"]
list3 = ["5", "3"]
zip = zip (luettelo1, luettelo2, luettelo3)
l1, l2, l3 = vetoketju (* vetoketju)
tulosta (luettelo (l1), luettelo (l2), luettelo (l3))
Kun olet suorittanut yllä mainitun koodinäytteen, sinun pitäisi saada seuraava tulos tuloksena:
['a', 'b'] ['omena', 'pallo'] ['5', '3']Yllä olevassa koodinäytteessä zip-objekti tyhjennetään käyttämällä * -operaattoria. Tyhjennetyt tulokset syötetään sitten toiseen zip-kutsu-toimintoon, joka luo alkuperäiset luettelot. Huomaa, että et välttämättä saa kaikkia elementtejä takaisin alkuperäisiin luetteloihin, jos epätasaisen pituisia luetteloita käytettiin, kun "zip" -objekti luotiin ensimmäisen kerran.
Zipin käyttäminen, kun haluat säilyttää elementit pisimmältä iteroituvalta
Useissa yllä olevissa esimerkeissä olet ehkä huomannut, että "zip" -toiminto pysähtyy oletusarvoisesti lyhyimmän iteroitavan viimeiseen elementtiin. Entä jos haluat sen jatkavan toistamista, kunnes se saavuttaa pisimmän toistettavan viimeisen osan?
Tällöin sinun on käytettävä "zip_longest ()" -menetelmää Pythonin "itertools" -moduulista. Se toimii samalla tavalla kuin "zip" -toiminto, yhdellä pienellä erolla, että se pysähtyy pisimmän iteroitavan tyypin viimeiseen elementtiin.
tuoda itertooleista zip_longestlist1 = ["a", "b", "c"]
list2 = ["omena", "pallo", "kissa", "nukke"]
list3 = ["5", "3"]
zip = zip_lestest (luettelo1, luettelo2, luettelo3)
tulosta (luettelo (pakattu))
Kun olet suorittanut yllä mainitun koodinäytteen, sinun pitäisi saada seuraava tulos tuloksena:
[('a', 'omena', '5'), ('b', 'pallo', '3'), ('c', 'kissa', ei mitään), (ei mitään, 'nukke', ei mitään) ]Puuttuvat arvot täytetään ”Ei mitään” -tyyppisinä objekteina. Voit myös antaa oman arvon täyttämistä varten välittämällä ylimääräisen "fillvalue" -argumentin "zip_longest" -menetelmälle.
tuoda itertooleista zip_longestlist1 = ["a", "b", "c"]
list2 = ["omena", "pallo", "kissa", "nukke"]
list3 = ["5", "3"]
zip = zip_pisin (luettelo1, luettelo2, luettelo3, fillvalue = "oma_arvo")
tulosta (luettelo (pakattu))
Kun olet suorittanut yllä mainitun koodinäytteen, sinun pitäisi saada seuraava tulos tuloksena:
[('a', 'omena', '5'), ('b', 'pallo', '3'), ('c', 'kissa', 'my_value'), ('my_value', 'nukke ',' oma_arvo ')]Johtopäätös
Zip-toiminto voidaan jäljitellä käyttämällä joitain silmukoita ja ehtolausekkeita. Se auttaa kuitenkin pitämään koodin järjestyksessä ja puhtaana poistamalla tarpeettoman sanatarkkuuden ja toistuvat lausunnot.