Tento tutoriál vás naučí, jak používat funkci enumerate() v Pythonu.
Funkce enumerate() v Pythonu poskytuje stručnou syntaxi pro přístup k položkám v iterovatelné podobě spolu s jejich indexy.
Začneme tím, že se podíváme na to, jak přistupovat k položkám a indexům pomocí jednoduchého cyklování, a poté se budeme učit syntaxi funkce enumerate() v Pythonu. Po cestě budeme také kódovat příklady.
Pojďme začít.
Table of Contents
Jak iterovat pomocí pro smyčku v Pythonu
Jakýkoli objekt Pythonu, který můžete iterovat a přistupovat k jednotlivým položkám – jeden po druhém, se nazývá iterovatelný. Proto jsou všechny seznamy, n-tice, slovníky a řetězce v Pythonu iterovatelné.
Vezměme si příklad nákupního seznamu definovaného v buňce kódu níže.
shopping_list = ["fruits","cookies","cereals","protein bars","post-it notes"]
V Pythonu můžete použít smyčku for k procházení libovolnou iterovatelnou možností. Syntaxe, jak to udělat, je následující:
for item in <iterable>: # do something on item # item: looping variable # <iterable>: any Python iterable: list, tuple, dictionary, string, and so on.
Nyní pomocí této syntaxe projdeme nákupním_seznamem a zpřístupníme jednotlivé položky.
for item in shopping_list: print(item) # Output fruits cookies cereals protein bars post-it notes
Tato konstrukce vám pomůže přistupovat k položkám přímo. Někdy však můžete potřebovat přístup k indexu položek, kromě položek samotných.
Můžete použít proměnnou indexu, kterou můžete zvýšit uvnitř těla smyčky, jak je znázorněno níže:
index = 0 for item in shopping_list: print(f"index:{index}, {item}") index += 1 # Output index:0, fruits index:1, cookies index:2, cereals index:3, protein bars index:4, post-it notes
Ale to není nejúčinnější metoda. Pokud si nezapomenete zvýšit index, váš kód nebude fungovat podle očekávání.
index = 0 for item in shopping_list: print(f"index:{index}, {item}") # no update of index inside loop body # index is never updated and is always 0 # Output index:0, fruits index:0, cookies index:0, cereals index:0, protein bars index:0, post-it notes
Další běžný vzor použití cyklu for je ve spojení s funkcí range(). To se dozvíme v další části.
Jak používat funkci range() pro přístup k indexu
Funkce len() vestavěná v Pythonu vrací délku libovolného objektu Pythonu. Můžete tedy zavolat funkci len() s argumentem nákupní_seznam, abyste získali délku nákupního_seznamu (což je v tomto případě 5).
len(shopping_list) # Output: 5
Funkce range() vrací objekt range, který pak můžete použít ve smyčce. Když procházíte rozsahem (stop), dostanete indexy 0, 1, 2,…, stop-1.
Nastavením stop = len(seznam) získáte seznam platných indexů. Takže pomocí funkce range() získáte přístup k indexu i k odpovídající položce, jak je znázorněno níže.
for index in range(len(shopping_list)): print(f"index:{index}, item: {shopping_list[index]}") # Output index:0, item: fruits index:1, item: cookies index:2, item: cereals index:3, item: protein bars index:4, item: post-it notes
Toto však není doporučený způsob Pythonic pro současný přístup k indexům i položkám.
Syntaxe funkce Python enumerate()
Funkce enumerate() Pythonu vám umožňuje přistupovat k položkám spolu s jejich indexy pomocí následující obecné syntaxe:
enumerate(<iterable>, start = 0)
Ve výše uvedené syntaxi:
je povinný parametr a může to být libovolný iterovatelný Python, jako je seznam nebo n-tice. - start je volitelný parametr, který řídí index, od kterého začíná počítání. Pokud nezadáte hodnotu start, výchozí je nula.
Nyní můžete zavolat funkci enumerate() s shopping_list a ta vrátí objekt enumerate, jak je znázorněno v buňce kódu níže.
enumerate(shopping_list) <enumerate at 0x7f91b4240410>
Objekt výčtu nelze opakovat. Pojďme tedy převést objekt enumerate na seznam Pythonu.
list(enumerate(shopping_list)) # Output [(0, 'fruits'), (1, 'cookies'), (2, 'cereals'), (3, 'protein bars'), (4, 'post-it notes')]
Další metodou přístupu k položkám objektu enumerate je volání funkce next(). s objektem enumerate jako argumentem. V Pythonu funkce next() vrací další položku z iterátoru.
Interně funguje funkce next() voláním metody __next__ na objektu iterátoru pro načtení po sobě jdoucích položek.
Přiřaďme objekt enumerate proměnné shopping_list_enum.
shopping_list_enum = enumerate(shopping_list)
Když poprvé zavoláte next() s shopping_list_enum, dostanete index nula a položku na indexu 0: n-tici (0, ‚ovoce‘).
Když budete pokračovat ve volání funkce next(), získáte po sobě jdoucí položky spolu s jejich indexy, jak je popsáno níže.
next(shopping_list_enum) # (0, 'fruits') next(shopping_list_enum) # (1, 'cookies') next(shopping_list_enum) # (2, 'cereals') next(shopping_list_enum) # (3, 'protein bars') next(shopping_list_enum) # (4, 'post-it notes')
Co se stane, když zavoláte funkci next() poté, co zpřístupníte všechny položky a dostanete se na konec seznamu? Zobrazí se chyba StopIteration.
next(shopping_list_enum) # --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-16-4220f68f6c7e> in <module>() ----> 1 next(shopping_list_enum) StopIteration:
Funkce enumerate() vrací po sobě jdoucí indexy a položky pouze v případě potřeby a nejsou počítány předem. V projektech Pythonu, kde potřebujete vzít v úvahu efektivitu paměti, můžete zkusit použít funkci enumerate(), když potřebujete procházet velké iterovatelné položky.
Příklady funkcí Python enumerate().
Nyní, když jsme se naučili syntaxi pro použití funkce enumerate(), pojďme upravit cyklus for, který jsme měli dříve.
Z předchozí části víme, že procházením objektu enumerate se vrací n-tice s indexem a položkou. Tuto n-tici můžeme rozbalit na dvě proměnné: index a položku.
for index, item in enumerate(shopping_list): print(f"index:{index}, item:{item}") # Output index:0, item:fruits index:1, item:cookies index:2, item:cereals index:3, item:protein bars index:4, item:post-it notes
Dále se podívejme, jak zadat vlastní počáteční hodnotu.
Jak enumerate() s vlastní počáteční hodnotou
Python se řídí nulovým indexováním, takže počáteční hodnota je ve výchozím nastavení 0. Pokud však potřebujete indexy ve formě čitelné pro člověka – počínaje 1 nebo jakýmkoli jiným indexem podle vašeho výběru, můžete zadat vlastní počáteční hodnotu.
Pokud v příkladu nákupního seznamu chcete začít počítat od 1, nastavte začátek = 1.
for index, item in enumerate(shopping_list,1): print(f"index:{index}, item:{item}") # Output index:1, item:fruits index:2, item:cookies index:3, item:cereals index:4, item:protein bars index:5, item:post-it notes
Při zadávání vlastní počáteční hodnoty byste si však měli být jisti, že ji zadáte jako druhý poziční argument.
Pokud omylem zaměníte pořadí iterovatelné a počáteční hodnoty, narazíte na chybu, jak je vysvětleno v buňce kódu níže.
for index, item in enumerate(1,shopping_list): print(f"index:{index}, item:{item}") # Output --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-12-5dbf7e2749aa> in <module>() ----> 1 for index, item in enumerate(1,shopping_list): 2 print(f"index:{index}, item:{item}") TypeError: 'list' object cannot be interpreted as an integer
Chcete-li se těmto chybám vyhnout, můžete zadat začátek jako argument klíčového slova, jak je uvedeno níže.
for index, item in enumerate(shopping_list, start = 1): print(f"index:{index}, item:{item}") # Output index:1, item:fruits index:2, item:cookies index:3, item:cereals index:4, item:protein bars index:5, item:post-it notes
Zatím jste se naučili používat funkci enumerate() se seznamy Pythonu. Funkci enumerate můžete také použít k procházení řetězců, slovníků a n-tic Pythonu.
Jak používat funkci enumerate() s pythonovými n-ticemi
Předpokládejme, že nákupní_seznam je n-tice. V Pythonu jsou n-tice také kolekcemi – podobně jako seznamy Pythonu, ale jsou neměnné. Proto je nemůžete upravit a pokus o to povede k chybě.
Následující fragment kódu inicializuje nákupní_seznam jako n-tici.
shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes") type(shopping_list) # Tuple
Pokud se pokusíte upravit první položku v n-tice, zobrazí se chyba, protože n-tice Python je neměnná kolekce.
shopping_list[0] = 'vegetables' # Output --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-2-ffdafa961600> in <module>() ----> 1 shopping_list[0] = 'vegetables' TypeError: 'tuple' object does not support item assignment
▶ Nyní spusťte následující fragment kódu, abyste ověřili, že funkce enumerate() funguje s n-ticemi podle očekávání.
shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes") for index, item in enumerate(shopping_list): print(f"index:{index}, item:{item}")
Jak používat funkci enumerate() s řetězci Python
Můžete také použít funkci Python enumerate() pro procházení řetězců a současný přístup ke znakům a indexům.
Zde je příklad.
py_str="Butterfly" for index, char in enumerate(py_str): print(f"index {index}: {char}") # Output index 0: B index 1: u index 2: t index 3: t index 4: e index 5: r index 6: f index 7: l index 8: y
Z výše uvedeného výstupu vidíme, že znaky spolu s jejich indexy (0-8) byly vytištěny.
Závěr👩🏽💻
Zde je souhrn toho, co jste se naučili.
- Pro přístup k položkám a udržování samostatné proměnné čítače nebo indexu můžete použít smyčky for.
- Pokud chcete, můžete pomocí funkce range() získat platné indexy a přistupovat k položkám indexováním v seznamu.
- Jako doporučený způsob Pythonic můžete použít funkci enumerate() Pythonu se syntaxí: enumerate(iterable). Ve výchozím nastavení začíná počet nebo index na 0.
- Můžete zadat vlastní počáteční hodnotu pomocí syntaxe enumerate(iterable, start), abyste získali index začínající hodnotou start a odpovídající položky.
- Funkci enumerate můžete použít při práci s n-ticemi, řetězci, slovníky a obecně s jakýmkoli iterovatelným Pythonem.
Doufám, že vám tento tutoriál o funkci enumerate() pomohl. Dále se naučte, jak najít index položky v seznamech Pythonu. Pokračujte v kódování!