Hvordan du bruker zip -funksjon i python

Hvordan du bruker zip -funksjon i python
Denne artikkelen vil dekke en guide om "Zip" -funksjon tilgjengelig i Pythons standardmodulbibliotek. Denne metoden lar deg kombinere og parre elementer av flere iterable objekter. Du kan deretter kjøre ytterligere logikk på disse parene. I mange tilfeller er bruk av en "zip" -funksjon mye mer effektiv og renere enn å bruke flere, nestede "for" løkker.

Om zip -funksjon

Som nevnt tidligere, brukes "zip" -funksjon for å lage par fra elementer av flere iterable objekter. Tenk på eksemplet nedenfor for å forstå den grunnleggende syntaks og bruk av zip -funksjon:

liste1 = ["a", "b", "c"]
LIST2 = ["Apple", "Ball", "Cat"]
Zipped = Zip (List1, List2)
trykk (liste (zipped))

De to første utsagnene i ovennevnte kodeprøve definerer to lister som inneholder noen elementer. Neste, "Zip" -funksjon brukes ved å passere "List1" og "List2" -variabler som argumenter. Dette er hovedsyntaks for "zip" -funksjonen. Du må bare passere lister eller andre gyldige bestilte iterables som argumenter hvis elementer du vil kombinere. Til slutt brukes utskriftserklæringen for å få utdataene fra "Zipped" -variabelen. Etter å ha kjørt kodeprøven som er nevnt over, bør du få følgende utdata:

[('A', 'Apple'), ('B', 'Ball'), ('C', 'Cat')]

Merk at "Zip" -funksjonen returnerer et "Zip" -type og ikke en liste. Du må konvertere den til en iterable type, som vist i utskriftserklæringen ovenfor.

Enkelt sagt plukker "zip" -funksjonen opp elementer av samme indeks fra to lister og kombinerer dem som et par i en tuple. Så det 0. elementet fra “List1” er kombinert med det 0. elementet i “List2”, det første elementet fra “List1” er kombinert med det første elementet i “List2” og så videre. Zip -funksjon beveger seg fra venstre mot høyre og tupelen som inneholder sammenkoblede elementer har samme indeks som elementene som er lagret i dem.

Bruke zip når iterables ikke har samme antall elementer

I eksemplet nevnt ovenfor har begge listene like antall elementer. I tilfelle du har å gjøre med noen koder der begge listene ikke har samme antall elementer, vil "Zip" -funksjon stoppe ved det siste elementet på listen som har det laveste antallet elementer.

I eksemplet nedenfor vil "Zip" -funksjonen stoppe ved "C" -elementet, uavhengig av "List2" som har ett element til.

liste1 = ["a", "b", "c"]
List2 = ["Apple", "Ball", "Cat", "Doll"]
Zipped = Zip (List1, List2)
trykk (liste (zipped))

Etter å ha kjørt kodeprøven som er nevnt over, bør du få følgende utdata:

[('A', 'Apple'), ('B', 'Ball'), ('C', 'Cat')]

Du kan bruke mer enn to iterabler når du bruker zip -funksjon

Vanligvis brukes "zip" -funksjon for å sammenligne to iterable objekter. Du kan imidlertid passere et hvilket som helst antall iterabler som argumenter til "zip" -funksjonen. Prinsippet om å stoppe ved det siste elementet på den korteste listen vil fortsatt være aktuelt.

liste1 = ["a", "b", "c"]
List2 = ["Apple", "Ball", "Cat", "Doll"]
liste3 = ["5", "3"]
Zipped = ZIP (List1, List2, List3)
trykk (liste (zipped))

Etter å ha kjørt kodeprøven som er nevnt ovenfor, bør du få følgende utdata som resultat:

[('A', 'Apple', '5'), ('B', 'Ball', '3')]

Opprette individuelle lister fra et zip -objekt

Hvis du allerede har et "zip" -objekt, kan du bruke det til å repopulere individuelle lister som tidligere ble brukt når zip -funksjonen først ble kalt på dem.

liste1 = ["a", "b", "c"]
List2 = ["Apple", "Ball", "Cat", "Doll"]
liste3 = ["5", "3"]
Zipped = ZIP (List1, List2, List3)
L1, L2, L3 = Zip (*Zipped)
Print (List (L1), List (L2), List (L3))

Etter å ha kjørt kodeprøven som er nevnt ovenfor, bør du få følgende utdata som resultat:

['A', 'B'] ['Apple', 'Ball'] ['5', '3']

I kodeprøven ovenfor tømmes "Zip" -objektet ved hjelp av "*" -operatøren. Deflaterte resultater blir deretter matet inn i en annen samtale til zip -funksjon som oppretter originale lister. Merk at du kanskje ikke får alle elementer tilbake i de originale listene hvis lister med ulik lengde ble brukt når "Zip" -objektet ble opprettet første gang.

Bruker zip når du vil forhindre elementer fra lengst iterable

I flere eksempler ovenfor kan du ha observert at "zip" -funksjonen som standard stopper ved det siste elementet i den korteste iterable. Hva om du vil at den skal fortsette å iterere til det når det siste elementet i den lengste iterable?

I et slikt tilfelle må du bruke “ZIP_Longest ()” -metoden fra Pythons “iterertools” -modul. Det fungerer det samme som "Zip" -funksjonen, med en liten forskjell som den stopper ved det siste elementet av den lengste iterable typen.

fra iterertools importerer zip_longest
liste1 = ["a", "b", "c"]
List2 = ["Apple", "Ball", "Cat", "Doll"]
liste3 = ["5", "3"]
ZIPPED = ZIP_LONGEST (LIST1, LIST2, LIST3)
trykk (liste (zipped))

Etter å ha kjørt kodeprøven som er nevnt ovenfor, bør du få følgende utdata som resultat:

[('A', 'Apple', '5'), ('B', 'Ball', '3'), ('C', 'Cat', None), (Ingen, 'Doll', ingen) ]

Manglende verdier er befolket som "ingen" type objekter. Du kan også levere din egen verdi for å fylle ved å sende et ekstra "FillValue" -argument til "ZIP_Longest" -metoden.

fra iterertools importerer zip_longest
liste1 = ["a", "b", "c"]
List2 = ["Apple", "Ball", "Cat", "Doll"]
liste3 = ["5", "3"]
ZIPPED = ZIP_LONGEST (LIST1, LIST2, LIST3, FILLVALUE = "MY_VALUE")
trykk (liste (zipped))

Etter å ha kjørt kodeprøven som er nevnt ovenfor, bør du få følgende utdata som resultat:

[('A', 'Apple', '5'), ('B', 'Ball', '3'), ('C', 'Cat', 'My_Value'), ('My_Value', 'Doll ',' my_value ')]

Konklusjon

ZIP -funksjon kan emuleres ved hjelp av noen løkker og forholdserklæringer. Imidlertid hjelper det å holde kode organisert og renere ved å fjerne unødvendig verbositet og repeterende uttalelser.