Pytonorm

Använd Enumerate-funktionen i Python för att skapa loopar med räknare

Använd Enumerate-funktionen i Python för att skapa loopar med räknare

Den här artikeln kommer att förklara användningen av funktionen "enumerate" som finns i Pythons standardmodulbibliotek. Uppräkningsfunktionen låter dig tilldela ett "index" eller "räkna" till element i alla iterabla objekt. Du kan sedan implementera ytterligare logik på dem eftersom du kommer att ha tillgång till båda värdena och ett antal mappade till det.

Syntax och grundläggande exempel

Om du har använt en "for" -slinga på andra programmeringsspråk, särskilt "C" -språk och andra språk som har "C" -syntax, kan du ha angett ett startindex i slingan. Som referens, här är hur en "for" -slinga ser ut i "C" och andra språk som har liknande syntax:

för (int i = 0; i < 10; i++)

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

Slinguppdraget initialiserar en variabel med värdet noll, kontrollerar att den är mindre än ett tröskelvärde och ökar den med ett antal efter att ha utvärderat logiken inuti slingblocket (om stoppvillkoret är uppfyllt). På så sätt kan du använda ett index och tilldela det till alla objekt som refereras till i ditt loopblock. I jämförelse, här är hur en for-loop med samma resultat ser ut i Python:

för jag inom intervallet (0, 10):
skriva ut (i)

Funktionen "intervall" i Python låter dig ange en nummerserie som har ett standardsteg på 1. Du kan ändra stegvärdet genom att ange ett tredje argument. Det andra argumentet i funktionen "intervall" används för att ställa in tröskeln för stopptillstånd. Båda kodproverna ger följande utdata:

0
1
2
3
4
5
6
7
8
9

Dessa slingor fungerar bra om du bara vill skapa någon nummerserie och associera dem med lite logik inuti loop-uttalandet. Du kan dock behöva använda en annan kapslad slinga eller använda funktionen "avkastning" på valfri iterabel typ för att tilldela dem någon form av spårbar räkning. Metoden "enumerate" gör det enkelt att tilldela index till iterables i ett uttalande, vilket eliminerar behovet av att köra flera kapslade loopar. Ta en titt på det här kodprovet:

siffror = ["noll", "en", "två", "tre", "fyra", "fem"]
enumerated_numbers = enumerate (numbers)
för index, artikel i enumerated_numbers:
skriva ut (index, artikel)

Det första uttalandet definierar en ny variabel som heter "siffror" och tilldelar en iterabel (listtyp) till den. Det andra uttalandet visar användningen av funktionen "räkna upp" där du anger en iterabel till den som ett obligatoriskt argument. Det tredje påståendet omvandlar variabeln "enumerated_numbers" till ett objekt av listtyp. Som standard genererar funktionen "enumerate" ett objekt "enumerate" och inte en iterabel typ, så du måste konvertera det. Efter att ha kört kodprovet som nämns ovan bör du få följande utdata:

[(0, 'noll'), (1, 'en'), (2, 'två'), (3, 'tre'), (4, 'fyra'), (5, 'fem')]

Funktionen "uppräkna" tilldelar varje element en räknare i en iterabel typ och skapar tuplar med parade värden. Som standard börjar räkningen från noll.

Nu när du har tilldelat ett nummer till varje element i en iterabel typ kan du enkelt slinga över det utan att skriva kapslade uttalanden:

siffror = ["noll", "en", "två", "tre", "fyra", "fem"]
enumerated_numbers = enumerate (numbers)
för index, artikel i enumerated_numbers:
skriva ut (index, artikel)

Kodprovet som anges ovan ger följande utdata:

0 noll
1 ett
2 två
3 tre
4 fyra
5 fem

Du kan göra koden kortare genom att använda "räkna" -funktionen inline, som visas i exemplet nedan:

siffror = ["noll", "en", "två", "tre", "fyra", "fem"]
för index, artikel i enumerate (siffror):
skriva ut (index, artikel)

Använda räkna med ett annat startindex

Funktionen "räkna" tar ett valfritt argument där du kan ange ett startindex. Som standard är det noll, men du kan ändra det genom att använda "start" -argumentet:

siffror = ["en", "två", "tre", "fyra", "fem"]
för index, artikel i enumerate (siffror, start = 1):
skriva ut (index, artikel)

I det andra uttalandet används "start = 1" -argument för att ändra startpunkten. Efter att ha kört kodprovet som anges ovan bör du få följande utdata:

1 ett
2 två
3 tre
4 fyra
5 fem

Tilldela index med steg

I det första avsnittet av denna artikel visas syntax för "för" -slinga på "C" -språk där du kan definiera steg mellan varje efterföljande räkning eller index. Funktionen "enumerate" i Python har inget sådant argument tillgängligt så du kan inte ange ett steg mellan räkningarna. Du kan verkligen skriva din egen logik för att implementera steg inuti det räknade "for" loop-blocket. Det finns dock ett sätt att implementera anpassade steg genom att skriva minimal kod. Följande exempel visar implementering av steg med funktionerna "zip" och "range":

siffror = ["noll", "två", "fyra", "sex"]
för index, artikel i zip (intervall (0, 7, 2), siffror):
skriva ut (index, artikel)

Med "zip" -funktionen kan du skapa par genom att plocka upp element som har samma index från två eller flera iterables. Så "zip" -funktionen här plockar upp ett element från den iterabla som returneras från "range (0, 7, 2)" -funktionen och ett annat element från "numbers" -listan och parar dem båda i en tuple. Slutresultatet är en identisk implementering av funktionen "räkna upp" men med anpassade steg som anges som ett tredje argument i "intervall (0, 7, 2)" -funktionen (2 i detta fall). Efter att ha kört kodprovet som anges ovan bör du få följande utdata:

0 noll
2 två
4 fyra
6 sex

Slutsats

Funktionen "enumerate" i Python låter dig skriva kortfattad kod genom att tilldela en nummerserie till element i ett iterabelt objekt. Detta är väldigt användbart om du vill hålla reda på indexet över artiklar i en iterabel typ. Om du vill "räkna" iterabla typer med anpassade steg, använd funktionen "zip" som förklarades i det senaste exemplet.

OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...
OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...
SuperTuxKart för Linux
SuperTuxKart är en fantastisk titel som är utformad för att ge dig Mario Kart-upplevelsen gratis på ditt Linux-system. Det är ganska utmanande och rol...