Bruk enumerat funksjon i Python for å lage løkker med tellere

Bruk enumerat funksjon i Python for å lage løkker med tellere

Denne artikkelen vil forklare bruken av "tellere" -funksjonen som er tilgjengelig i Pythons standardmodulbibliotek. Enumerate -funksjon lar deg tilordne en "indeks" eller "telle" til elementer i ethvert iterable objekt. Du kan deretter implementere ytterligere logikk på dem, da du vil ha tilgang til begge verdiene og en telling som er kartlagt til den.

Syntaks og grunnleggende eksempel

Hvis du har brukt en "for" -sløyfe på andre programmeringsspråk, spesielt "C" -språk og andre språk som har "C" -stilsyntaks, kan du ha spesifisert en startindeks i løkken. For referanse, her er hvordan en "for" -sløyfe ser ut i "C" og andre språk som har lignende syntaks:

for (int i = 0; i < 10; i++)

printf ("%d \ n", i);

Loop -setningen initialiserer en variabel med en verdi på null, sjekker at den er mindre enn en terskel og øker den med en telling etter å ha evaluert logikk inne i sløyfeblokken (hvis stopptilstanden er oppfylt). På denne måten kan du bruke en indeks og tilordne den til alle objekter som er referert til i loopblokken. Til sammenligning, her er hvordan en for loop med samme resultat ser ut i Python:

for i i rekkevidde (0, 10):
trykk (i)

"Range" -funksjonen i Python lar deg spesifisere en rekke rekkevidde -sekvens som har et standardtrinn på 1. Du kan endre trinnverdien ved å gi et tredje argument. Det andre argumentet i "rekkevidden" -funksjonen brukes til å angi terskelen for stopptilstand. Begge kodeprøver produserer følgende utgang:

0
1
2
3
4
5
6
7
8
9

Disse løkkene fungerer fint hvis du bare vil generere en viss tallsekvens og knytte dem til litt logikk inne i sløyfen. Imidlertid må du kanskje bruke en annen nestet sløyfe eller bruke "avkastning" -funksjonen på en hvilken som helst iterable type for å tilordne dem en slags sporbar telling. Den "tellere" -metoden gjør det enkelt å tilordne indekser til iterabler i en uttalelse, og eliminerer dermed behovet for å kjøre flere nestede løkker. Ta en titt på denne kodeprøven:

tall = ["null", "en", "to", "tre", "fire", "fem"]
Uumerated_numbers = enumerate (tall)
For indeks, element i enumerated_numbers:
utskrift (indeks, vare)

Den første uttalelsen definerer en ny variabel kalt “tall” og tildeler en iterable (listetype) til den. Den andre uttalelsen viser bruken av "enumerat" -funksjonen der du gir en iterable til den som et obligatorisk argument. Den tredje uttalelsen konverterer variabelen “Enumerated_numbers” til et listetypeobjekt. Som standard genererer "tellere" -funksjon et "enumerat" type objekt og ikke en iterable type, så du må konvertere det. Etter å ha kjørt kodeprøven som er nevnt over, bør du få følgende utdata:

[(0, 'null'), (1, 'en'), (2, 'to'), (3, 'tre'), (4, 'fire'), (5, 'fem')]

Den "tellere" -funksjonen tildeler en telling til hvert element i en iterable type og skaper tuples som har sammenkoblede verdier. Som standard starter tellingen fra null.

Nå som du har tildelt et tall til hvert element i en iterable type, kan du enkelt sløyfe over det uten å skrive nestede uttalelser:

tall = ["null", "en", "to", "tre", "fire", "fem"]
Uumerated_numbers = enumerate (tall)
For indeks, element i enumerated_numbers:
utskrift (indeks, vare)

Kodeprøven som er spesifisert ovenfor, vil produsere følgende utdata:

0 null
1 en
2 to
3 tre
4 fire
5 fem

Du kan gjøre koden kortere ved å bruke "enumerate" -funksjonen inline, som vist i prøven nedenfor:

tall = ["null", "en", "to", "tre", "fire", "fem"]
For indeks, element i enumerate (tall):
utskrift (indeks, vare)

Bruker oppregnet med en annen startindeks

Den "tellere" -funksjonen tar et valgfritt argument der du kan spesifisere en startindeks. Som standard er det null, men du kan endre det ved å bruke "start" -argument:

tall = ["en", "to", "tre", "fire", "fem"]
For indeks, element i enumerate (tall, start = 1):
utskrift (indeks, vare)

I den andre uttalelsen brukes "start = 1" -argument for å endre utgangspunktet. Etter å ha kjørt kodeprøven som er spesifisert ovenfor, bør du få følgende utdata:

1 en
2 to
3 tre
4 fire
5 fem

Tilordne indeks med trinn

I den første delen av denne artikkelen vises syntaks for "for" -sløyfe på "C" -språk der du kan definere trinn mellom hver påfølgende telling eller indeks. Den "tellere" -funksjonen i Python har ikke noe slikt argument tilgjengelig, slik at du ikke kan spesifisere et trinn mellom teller. Du kan faktisk skrive din egen logikk for å implementere trinn i den oppregnet "for" sløyfeblokk. Imidlertid er det en måte å implementere tilpassede trinn ved å skrive minimal kode. Følgende eksempel viser implementering av trinn ved bruk av "Zip" og "Range" -funksjoner:

tall = ["null", "to", "fire", "seks"]
For indeks, element i zip (rekkevidde (0, 7, 2), tall):
utskrift (indeks, vare)

"Zip" -funksjonen lar deg lage par ved å plukke opp elementer som har samme indeks fra to eller flere iterabler. Så "zip" -funksjonen her henter et element fra den iterable som returneres fra "Range (0, 7, 2)" -funksjonen og et annet element fra "tall" -liste og parer dem begge til en tuple. Sluttresultatet er en identisk implementering av "enumerat" -funksjonen, men med tilpassede trinn spesifisert som et tredje argument i "Range (0, 7, 2)" -funksjonen (2 i dette tilfellet). Etter å ha kjørt kodeprøven som er spesifisert ovenfor, bør du få følgende utdata:

0 null
2 to
4 fire
6 seks

Konklusjon

Den "enumerate" -funksjonen i Python lar deg skrive kortfattet kode ved å tilordne en tallsekvens til elementer i et iterable objekt. Dette er virkelig nyttig hvis du vil holde rede på indeksen over elementer i en iterable type. Hvis du vil "oppregne" iterable typer med tilpassede trinn, bruk "zip" -funksjonen som er forklart i det siste eksemplet.