Paano Gumamit ng Zip Function sa Python

How Use Zip Function Python



Saklaw ng artikulong ito ang isang gabay sa pagpapaandar ng zip na magagamit sa karaniwang module ng module ng Python. Pinapayagan ka ng pamamaraang ito na pagsamahin at ipares ang mga elemento ng maraming mga bagay na umuulit. Maaari ka nang magpatakbo ng karagdagang lohika sa mga pares na ito. Sa maraming mga kaso, ang paggamit ng isang pag-andar ng zip ay mas mahusay at mas malinis kaysa sa paggamit ng maramihang, pugad para sa mga loop.

Tungkol sa Zip Function

Tulad ng nakasaad nang mas maaga, ang pagpapaandar ng zip ay ginagamit upang lumikha ng mga pares mula sa mga elemento ng maraming mga maaaring umakmang mga bagay. Isaalang-alang ang halimbawa sa ibaba upang maunawaan ang pangunahing syntax at paggamit ng pagpapaandar ng zip:







listahan1= ['to', 'b', 'c']
listahan2= ['mansanas', 'bola', 'pusa']
naka-zip= zip(listahan1,listahan2)
mag-print (listahan(naka-zip))

Ang unang dalawang pahayag sa sample ng code sa itaas ay tumutukoy sa dalawang listahan na naglalaman ng ilang mga elemento. Susunod, ang pagpapaandar ng zip ay ginagamit ng pagpasa ng mga variable ng list1 at list2 bilang mga argumento. Ito ang pangunahing syntax ng pagpapaandar ng zip. Kailangan mo lamang ipasa ang mga listahan o iba pang wastong inorder na mga iterable bilang mga argumento na ang mga elemento ay nais mong pagsamahin. Panghuli, ang pahayag ng pag-print ay ginagamit upang makuha ang output ng variable na naka-zip. Matapos patakbuhin ang sample ng code na nabanggit sa itaas, dapat mong makuha ang sumusunod na output:



[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Tandaan na ang pagpapaandar ng zip ay nagbabalik ng isang bagay na uri ng zip at hindi isang listahan. Kailangan mong i-convert ito sa isang umuulit na uri, tulad ng ipinakita sa naka-print na pahayag sa itaas.



Sa mga simpleng term, ang zip function ay nakakakuha ng mga elemento ng parehong index mula sa dalawang listahan at pinagsasama ang mga ito bilang isang pares sa isang tuple. Kaya't ang ika-0 na elemento mula sa list1 ay pinagsama sa 0th na elemento ng list2, ang ika-1 elemento mula sa list1 ay pinagsama sa ika-1 elemento ng list2 at iba pa. Ang pagpapaandar ng zip ay gumagalaw mula kaliwa patungo sa kanan at ang tuple na naglalaman ng mga ipinares na elemento ay may parehong index tulad ng mga elemento na nakaimbak sa kanila.





Paggamit ng Zip Kapag ang Iterables ay Walang Parehong Bilang ng Mga Elemento

Sa halimbawang nakasaad sa itaas, ang parehong mga listahan ay may pantay na bilang ng mga elemento. Kung sakaling makitungo ka sa ilang code kung saan ang parehong mga listahan ay walang parehong bilang ng mga elemento, titigil ang pagpapaandar ng zip sa huling elemento ng listahan na mayroong pinakamababang bilang ng mga elemento.

Sa halimbawa sa ibaba, ang pagpapaandar ng zip ay hihinto sa elemento ng c, hindi alintana ang list2 na may isa pang elemento.



listahan1= ['to', 'b', 'c']
listahan2= ['mansanas', 'bola', 'pusa', 'manika']
naka-zip= zip(listahan1,listahan2)
mag-print (listahan(naka-zip))

Matapos patakbuhin ang sample ng code na nabanggit sa itaas, dapat mong makuha ang sumusunod na output:

[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Maaari kang Gumamit ng Higit sa Dalawang Iterable Kapag Gumagamit ng Zip Function

Kadalasan, ang pagpapaandar ng zip ay ginagamit upang ihambing ang dalawang mga bagay na umuulit. Gayunpaman, maaari mong ipasa ang anumang bilang ng mga iterable bilang mga argumento sa pagpapaandar ng zip. Ang prinsipyo ng pagtigil sa huling elemento ng pinakamaikling listahan ay mailalapat pa rin.

listahan1= ['to', 'b', 'c']
listahan2= ['mansanas', 'bola', 'pusa', 'manika']
listahan3= ['5', '3']
naka-zip= zip(listahan1,listahan2,listahan3)
mag-print (listahan(naka-zip))

Matapos patakbuhin ang sample ng code na nabanggit sa itaas, dapat mong makuha ang sumusunod na output bilang resulta:

[('a', 'apple', '5'), ('b', 'ball', '3')]

Lumilikha ng Indibidwal na Listahan mula sa isang Bagay na Uri ng Zip

Kung mayroon ka nang isang zip na bagay, maaari mo itong gamitin upang muling mapunan ang mga indibidwal na listahan na naunang ginamit noong ang pag-andar ng zip ay unang tinawag sa kanila.

listahan1= ['to', 'b', 'c']
listahan2= ['mansanas', 'bola', 'pusa', 'manika']
listahan3= ['5', '3']
naka-zip= zip(listahan1,listahan2,listahan3)
l1,l2,l3= zip(* naka-zip)
mag-print (listahan(l1), listahan(l2), listahan(l3))

Matapos patakbuhin ang sample ng code na nabanggit sa itaas, dapat mong makuha ang sumusunod na output bilang resulta:

['a', 'b'] ['apple', 'ball'] ['5', '3']

Sa sample ng code sa itaas, ang zip object ay na-deflate gamit ang * operator. Ang mga naipong resulta ay pagkatapos ay pinakain sa isa pang pag-andar sa call to zip na lumilikha ng mga orihinal na listahan. Tandaan na maaaring hindi mo maibalik ang lahat ng mga elemento sa mga orihinal na listahan kung ginamit ang mga listahan ng hindi pantay na haba nang ang zip object ay nilikha sa unang pagkakataon.

Paggamit ng Zip Kapag Nais Mong Panatilihin ang Mga Elemento mula sa Pinakamahabang Iterable

Sa maraming mga halimbawa sa itaas, maaaring napansin mo na ang pagpapaandar ng zip sa pamamagitan ng default ay hihinto sa huling elemento ng pinakamaikling iterable. Paano kung nais mong magpatuloy ito sa pag-ulit hanggang sa maabot nito ang huling elemento ng pinakamahabang iterable?

Sa ganitong kaso, kakailanganin mong gamitin ang zip_longest () na pamamaraan mula sa module na itertools ng Python. Gumagana ito katulad ng pagpapaandar ng zip, na may isang maliit na pagkakaiba na tumitigil ito sa huling elemento ng pinakamahabang uri na ito.

mula sa itertools angkatzip_longest
listahan1= ['to', 'b', 'c']
listahan2= ['mansanas', 'bola', 'pusa', 'manika']
listahan3= ['5', '3']
naka-zip=zip_longest(listahan1,listahan2,listahan3)
mag-print (listahan(naka-zip))

Matapos patakbuhin ang sample ng code na nabanggit sa itaas, dapat mong makuha ang sumusunod na output bilang resulta:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', Wala), (Wala, 'manika', Wala) ]

Ang mga nawawalang halaga ay pinopunan bilang Wala ng mga uri ng object. Maaari mo ring ibigay ang iyong sariling halaga upang punan sa pamamagitan ng pagpasa ng isang karagdagang argumento ng fillvalue sa zip_longest na pamamaraan.

mula sa itertools angkatzip_longest
listahan1= ['to', 'b', 'c']
listahan2= ['mansanas', 'bola', 'pusa', 'manika']
listahan3= ['5', '3']
naka-zip=zip_longest(listahan1,listahan2,listahan3,fillvalue='my_value')
mag-print (listahan(naka-zip))

Matapos patakbuhin ang sample ng code na nabanggit sa itaas, dapat mong makuha ang sumusunod na output bilang resulta:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'manika ',' my_value ')]

Konklusyon

Ang pagpapaandar ng zip ay maaaring tularan gamit ang ilang mga loop at mga pahayag ng kundisyon. Gayunpaman, nakakatulong ito sa pagpapanatili ng code na maayos at mas malinis sa pamamagitan ng pag-aalis ng hindi kinakailangang pagkamapamura at paulit-ulit na mga pahayag.