Python podržava mnoge objekte koji se mogu ponavljati: popisi, tuple i nizovi su samo neki. Pythonova petlja for je dovoljno fleksibilna da s lakoćom rukuje ovim objektima. Konkretno, štedi vas od samog suočavanja s brojčanim indeksom svakog unosa.

Ali ponekad ćete htjeti raditi s indeksom, na primjer, za brojanje ili filtriranje stavki u zbirci. Naučite kako možete koristiti Pythonovu funkciju nabrajanja za ponavljanje niza uz praćenje i indeksa i elementa.

Ponavljanje bez enumerate()

Razmotrite sljedeći Python popis.

my_fruits = ["jabuke", "kruške", "banane"]

Pretpostavimo da želite pratiti broj svakog elementa na popisu. Mogao bi koristite for petlju s raspon() funkcionirati ovako.

broji = 0

za voće u raspon (len (moje_voće)):
ispis (broj, moje_voće[broj])
broji += 1

Iako ovo funkcionira, ima nekoliko nedostataka:

  • Morate pratiti brojanje izvan petlje.
  • Morate povećati broj u svakoj iteraciji.
  • Morate izračunati duljinu petlje.
  • raspon (len()) radi samo s prebrojivim objektima koji se mogu indeksirati.
instagram viewer

Postoji bolje rješenje: funkcija enumerate().

Kako enumerate() radi u Pythonu

Python nabrojati() funkcija uzima zbirku podataka i vraća objekt nabrajanja. Objekt enumerate sadrži brojač kao ključ za svaku stavku koju objekt sadrži. The nabrojati() funkcija to čini tako što svakoj stavci dodjeljuje broj. Ovaj broj odgovara broju iteracija koje je funkcija dovršila da bi dosegla tu vrijednost.

Ovaj brojač olakšava pristup stavkama u zbirci ili čak mijenja zbirku gdje je to moguće.

S nabrojati(), ne morate pratiti duljinu petlje ili broj ponavljanja. Također možete izbjeći eksplicitni pristup vrijednosti pomoću indeksnog operatora, npr voće [broj]. Funkcija enumerate automatski obrađuje sve ove značajke.

Sintaksa Pythona enumerate()

Ispod je opća sintaksa za funkciju enumerate().

nabrajati (iterable, start=0)

enumerate() uzima dva argumenta:

  1. iterable: zbirka podataka ili sekvenca koju Python može iterirati. Npr. popis ili torku.
  2. start: indeks od kojeg bi funkcija enumerate trebala početi brojati.

Kako se enumerate() implementira

Da razumiju kako nabrojati() radi, da vidimo kako se zapravo implementira.

defnabrojati(slijed, početak=0):
n = početak

za elem u slijed:
prinos n, elem
n += 1

Ova funkcija koju možete pronaći u Dokumentacija za nabrajanje Pythona, uzima niz i početni argument koji je zadana vrijednost 0.

Funkcija tada inicijalizira varijablu n na početnu varijablu. Time se prati broj iteracija.

U for petlji koja slijedi za svaki element u nizu,

  • prinos pauzira izvođenje petlje.
  • Također vraća trenutni broj (n) i vrijednost (elem).
  • Kada se petlja nastavi, povećava se n.

Povratna vrijednost je objekt parova ključ/vrijednost.

Ako biste nazvali nabrojati() funkciju i proslijediti joj popis voća, to bi bila izlazna vrijednost.

my_fruits = ["jabuke", "kruške", "banane"]
nabroji_objekt = nabroji (moje_voće)
ispis (popis (enumerate_object))

# izlaz - [(0, 'jabuke'), (1, 'kruške'), (2, 'banane')]

Nabrojati s drugačijim početnim indeksom

U gornjem primjeru nismo naveli početni indeks. Primjer u nastavku pokazuje vam kako možete postaviti početni indeks na broj po vašem izboru.

Za početak u 10, učinite sljedeće.

enumerate_object = nabrajati (moje_voće, 10)
ispis (popis (enumerate_object))

# izlaz - [(10, 'jabuke'), (11, 'kruške'), (12, 'banane')]

Python enumerate() Primjeri

Evo nekoliko primjera koji pokazuju kako možete koristiti nabrojati() u Pythonu.

Nabroji Python string

U ovom ćete primjeru koristiti enumerate za dohvaćanje slova na indeksu 5:

my_string = "makeuseof"

za broj, vrijednost u nabrajati (moj_string):
ako broji == 5:
ispisati (vrijednost)

# izlaz - s

Nabrojite Python tuple

Također možete koristiti nabrojati() ponoviti preko a Python tuple. U ovom primjeru, program ispisuje zaglavlje u prvoj iteraciji, prije prikaza stavki.

my_fruits_tuple = ("jabuke", "kruške", "banane")

za indeks, vrijednost u nabrajati (moje_voće_torke):
ako (indeks == 0):
print("Voće:")

ispis (vrijednost)

/*
Voće:
jabuke
kruške
banane
*/

Nabrojite Python listu

U donjem primjeru koristite enumerate za smanjenje svih brojeva na popisu iznad 10 za 2.

moj_popis_brojeva = [10, 17, 15, 6]

za indeks, vrijednost u nabrajati (moj_popis_brojeva):
ako (vrijednost > 10):
moj_popis_brojeva[indeks] -= 2

ispis (moj_popis_brojeva)

# izlaz - [10, 15, 13, 6]

Upotrijebite enumerate da prebrojite svoje iterable

Python uključuje nabrojati() kao ugrađena funkcija. Možete ga koristiti za ponavljanje i brojanje stavki u kolekciji koja se može ponavljati kao što je popis, torka ili niz. Može vam pomoći pratiti pravi indeks svakog elementa, ali također možete odrediti svoj vlastiti početni indeks. Koristite ga kao alternativu za raspon () ako radite s objektima koji nisu prebrojivi i objekti koji se mogu indeksirati.