Python podporuje mnoho iterovatelných objektů: seznamy, n-tice a řetězce jsou jen některé. Smyčka for Pythonu je dostatečně flexibilní, aby tyto objekty snadno zvládla. Zejména vám to ušetří práci s číselným indexem každého záznamu sami.

Někdy však budete chtít pracovat s indexem, například počítat nebo filtrovat položky v kolekci. Zjistěte, jak můžete použít funkci Python enumerate k iteraci sekvence a zároveň sledovat index i prvek.

Iterace bez enumerate()

Zvažte následující seznam Pythonu.

my_fruits = ["jablka", "hrušky", "banány"]

Předpokládejme, že chcete mít přehled o počtu každého prvku v seznamu. Mohl bys použijte smyčku for s rozsah() fungovat takto.

počítat = 0

pro ovoce v rozsah (len (moje_ovoce)):
tisknout (count, my_fruits[count])
počítat += 1

I když to funguje, má to několik nedostatků:

  • Musíte sledovat počet mimo smyčku.
  • Musíte zvýšit počet v každé iteraci.
  • Musíte vypočítat délku smyčky.
  • rozsah (délka()) funguje pouze s počitatelnými, indexovatelnými objekty.

Existuje lepší řešení: funkce enumerate().

Jak enumerate() funguje v Pythonu

Python vyjmenovat() funkce vezme kolekci dat a vrátí objekt výčtu. Objekt enumerate obsahuje čítač jako klíč pro každou položku, kterou objekt obsahuje. The vyjmenovat() funkce to dělá tak, že každé položce přiřadí počet. Tento počet odpovídá počtu iterací, které funkce dokončila, aby dosáhla této hodnoty.

Toto počítadlo usnadňuje přístup k položkám ve sbírce nebo dokonce zmutuje sbírku, kde je to možné.

S vyjmenovat(), nemusíte sledovat délku smyčky ani počet iterací. Můžete se také vyhnout explicitnímu přístupu k hodnotě pomocí operátoru indexu, jako je ovoce [počet]. Funkce enumerate automaticky zvládá všechny tyto funkce.

Syntaxe Pythonu enumerate()

Níže je obecná syntaxe funkce enumerate().

vyjmenovat (iterovatelné, start=0)

enumerate() má dva argumenty:

  1. iterable: kolekce dat nebo sekvence, kterou může Python iterovat. Např. seznam nebo n-tice.
  2. start: index, od kterého má funkce enumerate začít počítat.

Jak je enumerate() implementováno

Abyste pochopili jak vyjmenovat() funguje, podívejme se, jak je ve skutečnosti implementován.

defvyjmenovat(sekvence, začátek=0):
n = začátek

pro elem v sekvence:
výtěžek n, el
n += 1

Tato funkce, kterou najdete v Dokumentace výčtu Pythonu, vezme sekvenci a argument start, který má výchozí hodnotu 0.

Funkce pak inicializuje proměnnou n na proměnnou start. Tím se sleduje počet iterací.

V cyklu for, který následuje pro každý prvek v sekvenci,

  • výtěžek pozastaví provádění smyčky.
  • Vrátí také aktuální počet (n) a hodnotu (elem).
  • Když se smyčka obnoví, zvýší se n.

Vrácená hodnota je objektem párů klíč–hodnota.

Pokud byste zavolali na vyjmenovat() funkci a předat jí seznam ovoce, to by byla výstupní hodnota.

my_fruits = ["jablka", "hrušky", "banány"]
enumerate_object = enumerate (moje_ovoce)
tisknout (seznam (výčet_objektu))

# výstup - [(0, 'jablka'), (1, 'hrušky'), (2, 'banány')]

Výčet s jiným výchozím indexem

Ve výše uvedeném příkladu jsme nespecifikovali počáteční index. Níže uvedený příklad ukazuje, jak můžete nastavit počáteční index na číslo dle vašeho výběru.

Chcete-li začít v 10, proveďte následující.

enumerate_object = enumerate (moje_ovoce, 10)
tisknout (seznam (výčet_objektu))

# výstup - [(10, 'jablka'), (11, 'hrušky'), (12, 'banány')]

Python enumerate() Příklady

Zde je několik příkladů, které ukazují, jak můžete použít vyjmenovat() v Pythonu.

Vyjmenujte řetězec Python

V tomto příkladu použijete enumerate k načtení písmene na indexu 5:

my_string = "makeuseof"

pro počet, hodnota v enumerate (my_string):
-li počítat == 5:
tisk (hodnota)

# výstup - s

Vytvořte výčet Python Tuple

Můžete také použít vyjmenovat() iterovat přes a Pythonská n-tice. V tomto příkladu program vytiskne záhlaví v první iteraci před zobrazením položek.

my_fruits_tuple = ("jablka", "hrušky", "banány")

pro index, hodnota v enumerate (my_fruits_tuple):
-li (index == 0):
tisk ("Ovoce:")

tisknout (hodnota)

/*
Ovoce:
jablka
hrušky
banány
*/

Vyjmenujte seznam Pythonu

V níže uvedeném příkladu používáte výčet ke snížení všech čísel v seznamu nad 10 o 2.

můj_seznam_čísel = [10, 17, 15, 6]

pro index, hodnota v výčet (můj_seznam_čísel):
-li (hodnota > 10):
můj_seznam_čísel[index] -= 2

tisknout (můj_seznam_čísel)

# výstup - [10, 15, 13, 6]

Použijte enumerate k počítání iterables

Python zahrnuje vyjmenovat() jako vestavěná funkce. Můžete jej použít k iteraci a počítání položek v iterovatelné kolekci, jako je seznam, n-tice nebo řetězec. Může vám pomoci sledovat skutečný index každého prvku, ale můžete také zadat svůj vlastní počáteční index. Použijte jej jako alternativu k rozsah() pokud pracujete s objekty, které nejsou počitatelné a indexovatelné.