Hur man använder Zip -funktion i Python

How Use Zip Function Python



Denna artikel kommer att omfatta en guide om zip -funktion som finns i Pythons standardmodulbibliotek. Denna metod låter dig kombinera och para ihop element i flera iterabla objekt. Du kan sedan köra ytterligare logik på dessa par. I många fall är det mycket mer effektivt och renare att använda en zip -funktion än att använda flera, kapslade för slingor.

Om Zip -funktion

Som tidigare nämnts används zip -funktion för att skapa par från element i flera iterbara objekt. Tänk på exemplet nedan för att förstå den grundläggande syntaxen och användningen av zip -funktionen:







lista 1= ['till', 'b', 'c']
lista2= ['äpple', 'boll', 'katt']
dragkedja= blixtlås(lista 1,lista2)
skriva ut (lista(dragkedja))

De två första påståendena i ovanstående kodprov definierar två listor som innehåller några element. Därefter används zip -funktionen genom att skicka variablerna list1 och list2 som argument. Detta är huvudsyntaxen för zip -funktionen. Du måste bara skicka listor eller andra giltiga ordnade iterabler som argument vars element du vill kombinera. Slutligen används utskriftsuttalandet för att få ut den zippade variabelns utdata. Efter att ha kört kodprovet som nämns ovan bör du få följande utdata:



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

Observera att zip -funktionen returnerar ett zip -objekt och inte en lista. Du måste konvertera den till en iterbar typ, som visas i utskriftsuttalandet ovan.



Enkelt uttryckt, zip -funktionen plockar upp delar av samma index från två listor och kombinerar dem som ett par i en tupel. Så det 0: e elementet från list1 kombineras med det 0: e elementet i list2, det första elementet från list1 kombineras med det första elementet i list2 och så vidare. Zip -funktionen flyttas från vänster till höger och tupeln som innehåller parade element har samma index som elementen som är lagrade i dem.





Använda Zip när Iterables inte har samma antal element

I exemplet ovan har båda listorna lika många element. Om du har att göra med någon kod där båda listorna inte har samma antal element kommer zip -funktionen att stanna vid det sista elementet i listan som har det lägsta antalet element.

I exemplet nedan kommer zip -funktionen att stanna vid c -elementet, oavsett om list2 har ytterligare ett element.



lista 1= ['till', 'b', 'c']
lista2= ['äpple', 'boll', 'katt', 'docka']
dragkedja= blixtlås(lista 1,lista2)
skriva ut (lista(dragkedja))

Efter att ha kört kodprovet som nämns ovan bör du få följande utdata:

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

Du kan använda mer än två Iterables när du använder Zip -funktion

Vanligtvis används zip -funktion för att jämföra två iterabla objekt. Du kan dock skicka valfritt antal iterabler som argument till zip -funktionen. Principen att stanna vid den sista delen av den kortaste listan kommer fortfarande att vara tillämplig.

lista 1= ['till', 'b', 'c']
lista2= ['äpple', 'boll', 'katt', 'docka']
lista3= ['5', '3']
dragkedja= blixtlås(lista 1,lista2,lista3)
skriva ut (lista(dragkedja))

Efter att ha kört kodprovet som nämns ovan bör du få följande utdata som resultat:

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

Skapa individuella listor från ett Zip -typobjekt

Om du redan har ett zip -objekt kan du använda det för att återbefolka enskilda listor som tidigare användes när zip -funktionen först anropades på dem.

lista 1= ['till', 'b', 'c']
lista2= ['äpple', 'boll', 'katt', 'docka']
lista3= ['5', '3']
dragkedja= blixtlås(lista 1,lista2,lista3)
l1,l2,l3= blixtlås(*dragkedja)
skriva ut (lista(l1), lista(l2), lista(l3))

Efter att ha kört kodprovet som nämns ovan bör du få följande utdata som resultat:

['a', 'b'] ['äpple', 'boll'] ['5', '3']

I kodprovet ovan töms zip -objektet med * operator. Deflaterade resultat matas sedan in i en annan call to zip -funktion som skapar originallistor. Observera att du kanske inte får tillbaka alla element i de ursprungliga listorna om listor med olika längd användes när zip -objektet skapades första gången.

Använda Zip när du vill hålla element från längsta Iterable

I flera exempel ovan kan du ha observerat att zip -funktionen som standard stannar vid det sista elementet i den kortaste iterern. Vad händer om du vill att den ska fortsätta iterera tills den når det sista elementet i den längsta iterabla?

I ett sådant fall måste du använda zip_longest () -metoden från Pythons itertools -modul. Det fungerar på samma sätt som zip -funktionen, med en liten skillnad att det stannar vid det sista elementet i den längsta iterbara typen.

från iterverktyg importerazip_longest
lista 1= ['till', 'b', 'c']
lista2= ['äpple', 'boll', 'katt', 'docka']
lista3= ['5', '3']
dragkedja=zip_longest(lista 1,lista2,lista3)
skriva ut (lista(dragkedja))

Efter att ha kört kodprovet som nämns ovan bör du få följande utdata som resultat:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]

Saknade värden fylls i som Inga typobjekt. Du kan också ange ditt eget värde att fylla genom att skicka ett extra fillvalue -argument till zip_longest -metoden.

från iterverktyg importerazip_longest
lista 1= ['till', 'b', 'c']
lista2= ['äpple', 'boll', 'katt', 'docka']
lista3= ['5', '3']
dragkedja=zip_longest(lista 1,lista2,lista3,fyllningsvärde='mitt_värde')
skriva ut (lista(dragkedja))

Efter att ha kört kodprovet som nämns ovan bör du få följande utdata som resultat:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'doll ',' mitt_värde ')]

Slutsats

Zip -funktion kan emuleras med hjälp av några slingor och villkor uttalanden. Det hjälper dock till att hålla koden organiserad och renare genom att ta bort onödig ordenlighet och repetitiva uttalanden.