Om Zip -funksjon
Som nevnt tidligere, brukes zip -funksjonen til å lage par fra elementer av flere gjentatte objekter. Vurder eksemplet nedenfor for å forstå den grunnleggende syntaksen og bruken av zip -funksjonen:
liste 1= ['til', 'b', 'c']
liste 2= ['eple', 'ball', 'katt']
glidelås= glidelås(liste 1,liste 2)
skrive ut (liste(glidelås))
De to første setningene i kodeeksemplet ovenfor definerer to lister som inneholder noen elementer. Deretter brukes zip -funksjonen ved å sende list1 og list2 variabler som argumenter. Dette er hovedsyntaksen for zip -funksjonen. Du må bare sende lister eller andre gyldige ordnede iterabler som argumenter hvis elementer du vil kombinere. Til slutt brukes utskriftserklæringen for å få utgangen av variabelen med glidelås. Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata:
[('a', 'eple'), ('b', 'ball'), ('c', 'katt')]
Vær oppmerksom på at zip -funksjonen returnerer et zip -objekt og ikke en liste. Du må konvertere den til en gjentakende type, som vist i utskriftserklæringen ovenfor.
Enkelt sagt, zip -funksjonen plukker opp elementer fra samme indeks fra to lister og kombinerer dem som et par i en tupel. Så det niende elementet fra liste1 er kombinert med det niende elementet i liste2, det første elementet fra liste1 er kombinert med det første elementet i liste2 og så videre. Zip -funksjonen beveger seg fra venstre til 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 ovenfor har begge listene like mange elementer. Hvis du har å gjøre med noen kode der begge listene ikke har samme antall elementer, stopper zip -funksjonen ved det siste elementet i listen som har det laveste antallet elementer.
I eksemplet nedenfor stopper zip -funksjonen ved c -elementet, uavhengig av at list2 har et element til.
liste 1= ['til', 'b', 'c']
liste 2= ['eple', 'ball', 'katt', 'dukke']
glidelås= glidelås(liste 1,liste 2)
skrive ut (liste(glidelås))
Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata:
[('a', 'eple'), ('b', 'ball'), ('c', 'katt')]Du kan bruke mer enn to Iterables når du bruker Zip -funksjon
Vanligvis brukes zip -funksjon for å sammenligne to gjentakende objekter. Du kan imidlertid sende et hvilket som helst antall iterabler som argumenter til zip -funksjonen. Prinsippet om å stoppe ved det siste elementet i den korteste listen vil fortsatt være gjeldende.
liste 1= ['til', 'b', 'c']liste 2= ['eple', 'ball', 'katt', 'dukke']
liste 3= ['5', '3']
glidelås= glidelås(liste 1,liste 2,liste 3)
skrive ut (liste(glidelås))
Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata som resultat:
[('a', 'eple', '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 da zip -funksjonen først ble kalt på dem.
liste 1= ['til', 'b', 'c']liste 2= ['eple', 'ball', 'katt', 'dukke']
liste 3= ['5', '3']
glidelås= glidelås(liste 1,liste 2,liste 3)
l1,l2,l3= glidelås(*glidelås)
skrive ut (liste(l1), liste(l2), liste(l3))
Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata som resultat:
['a', 'b'] ['eple', 'ball'] ['5', '3']I kodeeksemplet ovenfor tømmes zip -objektet med * operator. Deflaterte resultater mates deretter inn i en annen call to zip -funksjon som lager originale lister. Vær oppmerksom på at du kanskje ikke får alle elementene tilbake i de originale listene hvis lister med ulik lengde ble brukt da zip -objektet ble opprettet første gang.
Bruke Zip når du vil beholde elementer fra lengste Iterable
I flere eksempler ovenfor har du kanskje observert at zip -funksjonen som standard stopper ved det siste elementet i den korteste gjentakelsen. Hva om du vil at den skal fortsette å gjenta til den når det siste elementet i den lengste gjentatte?
I et slikt tilfelle må du bruke zip_longest () -metoden fra Pythons itertools -modul. Den fungerer på samme måte som zip -funksjonen, med en liten forskjell at den stopper ved det siste elementet i den lengste gjentagelige typen.
fra itertools importzip_longestliste 1= ['til', 'b', 'c']
liste 2= ['eple', 'ball', 'katt', 'dukke']
liste 3= ['5', '3']
glidelås=zip_longest(liste 1,liste 2,liste 3)
skrive ut (liste(glidelås))
Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata som resultat:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]Manglende verdier fylles ut som Ingen type objekter. Du kan også angi din egen verdi for å fylle ved å sende et ekstra fillvalue -argument til zip_longest -metoden.
fra itertools importzip_longestliste 1= ['til', 'b', 'c']
liste 2= ['eple', 'ball', 'katt', 'dukke']
liste 3= ['5', '3']
glidelås=zip_longest(liste 1,liste 2,liste 3,fyllverdi='min_verdi')
skrive ut (liste(glidelås))
Etter å ha kjørt kodeeksemplet nevnt ovenfor, bør du få følgende utdata som resultat:
[('a', 'eple', '5'), ('b', 'ball', '3'), ('c', 'katt', 'min_verdi'), ('min_verdi', 'dukke ',' min_verdi ')]Konklusjon
Zip -funksjonen kan emuleres ved hjelp av noen sløyfer og betingelser. Det hjelper imidlertid med å holde koden organisert og renere ved å fjerne unødvendig verbositet og repeterende utsagn.