Teave Zip-funktsiooni kohta
Nagu varem öeldud, kasutatakse funktsiooni “zip” paari loomiseks mitme korduva objekti elementidest. Kaaluge allpool toodud näidet, et mõista ZIP-funktsiooni põhisüntaksit ja kasutamist:
list1 = ["a", "b", "c"]list2 = ["õun", "pall", "kass"]
lukuga = zip (loend1, loend2)
print (loend (lukuga))
Kaks ülaltoodud koodinäidise esimest lauset määratlevad kaks loendit, mis sisaldavad mõnda elementi. Järgmisena kasutatakse funktsiooni „zip”, edastades argumentidena muutujad „list1” ja „list2”. See on funktsiooni “zip” peamine süntaks. Argumentidena, mille elemente soovite kombineerida, peate lihtsalt edastama loendid või muud kehtivad tellitud iterable-d. Lõpuks kasutatakse printimislauset muutuja “zipped” väljundi saamiseks. Pärast ülalnimetatud koodinäidise käivitamist peaksite saama järgmise väljundi:
[('a', 'õun'), ('b', 'pall'), ('c', 'kass')]Pange tähele, et funktsioon „zip” tagastab „zip” tüüpi objekti, mitte loendi. Peate selle teisendatavaks tüübiks teisendama, nagu on näidatud ülaltoodud printimisavalduses.
Lihtsamalt öeldes võtab funktsioon „zip“ kahest loendist üles sama indeksi elemendid ja kombineerib need paarina paarina. Nii et “list1” 0. element on ühendatud “list2” 0. elemendiga, “list1” 1. element on ühendatud “list2” 1. elemendiga ja nii edasi. Zip-funktsioon liigub vasakult paremale ja paaristatud elemente sisaldaval dupleksil on sama indeks kui nendesse salvestatud elementidel.
Zip-i kasutamine, kui korduvatel pole sama arvu elemente
Eespool toodud näites on mõlemal loendil võrdne arv elemente. Kui teil on tegemist mõne koodiga, kus mõlemas loendis pole sama arvu elemente, peatub funktsioon „zip“ loendi viimasel elemendil, millel on kõige vähem elemente.
Allpool toodud näites peatub funktsioon „zip“ elemendi „c“ juures, olenemata sellest, kas „list2“ sisaldab veel ühte elementi.
list1 = ["a", "b", "c"]list2 = ["õun", "pall", "kass", "nukk"]
lukuga = zip (loend1, loend2)
print (loend (lukuga))
Pärast ülalnimetatud koodinäidise käivitamist peaksite saama järgmise väljundi:
[('a', 'õun'), ('b', 'pall'), ('c', 'kass')]Zip-funktsiooni kasutamisel saate kasutada rohkem kui kahte itterable'i
Tavaliselt kasutatakse funktsiooni “zip” kahe korduva objekti võrdlemiseks. Funktsioonile "zip" saate siiski argumentidena edastada suvalise arvu korduvaid. Lühima loendi viimases elemendis peatumise põhimõte jääb endiselt kehtima.
list1 = ["a", "b", "c"]list2 = ["õun", "pall", "kass", "nukk"]
list3 = ["5", "3"]
zip = zip (loend1, loend2, loend3)
print (loend (lukuga))
Pärast ülalnimetatud koodinäidise käivitamist peaksite saama järgmise väljundi:
[('a', 'õun', '5'), ('b', 'pall', '3')]Individuaalsete loendite loomine ZIP-tüüpi objektist
Kui teil on juba „zip“ objekt, saate seda kasutada üksikute loendite uuesti asustamiseks, mida varem kasutati, kui ZIP-funktsioon neile esimest korda kutsuti.
list1 = ["a", "b", "c"]list2 = ["õun", "pall", "kass", "nukk"]
list3 = ["5", "3"]
zip = zip (loend1, loend2, loend3)
l1, l2, l3 = tõmblukk (* lukuga)
print (loend (l1), loend (l2), loend (l3))
Pärast ülalnimetatud koodinäidise käivitamist peaksite saama järgmise väljundi:
['a', 'b'] ['õun', 'pall'] ['5', '3']Ülaltoodud koodinäites tühjendatakse „zip” objekt operaatori „*” abil. Tühjendatud tulemused suunatakse seejärel teise zip-funktsiooni poole, mis loob algsed loendid. Pange tähele, et te ei pruugi kõiki elemente algsesse loendisse tagasi tuua, kui objekti „zip” esmakordsel loomisel kasutati ebavõrdse pikkusega loendeid.
Zip-i kasutamine siis, kui soovite elemente hoida kõige kauem pöörduvatena
Mitmes ülaltoodud näites võite olla märganud, et vaikimisi peatub „zip” funktsioon kõige lühema iteratsiooni viimasel elemendil. Mis siis, kui soovite, et see jätkaks itereerimist seni, kuni see jõuab kõige pikema korduva viimase elemendini?
Sellisel juhul peate kasutama Pythoni mooduli “itertools” meetodit “zip_longest ()”. See töötab samamoodi nagu funktsioon "zip", ühe väikese erinevusega, et see peatub kõige pikema itereeritava tüübi viimases elemendis.
itertoolidest importige zip_longestlist1 = ["a", "b", "c"]
list2 = ["õun", "pall", "kass", "nukk"]
list3 = ["5", "3"]
lukuga = zip_longest (loend1, loend2, loend3)
print (loend (lukuga))
Pärast ülalnimetatud koodinäidise käivitamist peaksite saama järgmise väljundi:
[('a', 'õun', '5'), ('b', 'pall', '3'), ('c', 'kass', pole), (puudub, 'nukk', pole) ]Puuduvad väärtused täidetakse „Puuduvad“ tüüpi objektidena. Võite ka sisestada oma väärtuse täitmiseks, edastades meetodile „zip_longest” täiendava argumendi „fillvalue”.
itertoolidest importige zip_longestlist1 = ["a", "b", "c"]
list2 = ["õun", "pall", "kass", "nukk"]
list3 = ["5", "3"]
zipped = zip_longest (loend1, loend2, loend3, täiteväärtus = "minu_väärtus")
print (loend (lukuga))
Pärast ülalnimetatud koodinäidise käivitamist peaksite saama järgmise väljundi:
[('a', 'õun', '5'), ('b', 'pall', '3'), ('c', 'kass', 'minu_väärtus'), ('minu_väärtus', 'nukk' ',' minu_väärtus ')]Järeldus
Zip-funktsiooni saab jäljendada mõningate tsüklite ja tingimuste avalduste abil. Kuid see aitab hoida koodi korrastatud ja puhtamana, eemaldades tarbetu paljusõnalisuse ja korduvad avaldused.