V této příručce se dozvíte, jak najít index prvku v seznamu Python, a to jak pomocí jednoduchých iterací, tak pomocí vestavěné metody seznamu index().
Při práci se seznamy Pythonu možná budete muset zjistit index, na kterém se konkrétní položka vyskytuje. Můžete to udělat takto:
- Procházení seznamu a kontrola, zda se položka na aktuálním indexu rovná konkrétní hodnotě
- Použití vestavěné metody seznamu index()
Obojí výše uvedené se dozvíte v tomto tutoriálu. Začínáme.👩🏽💻
Table of Contents
Seznamy Pythonu, znovu navštívené
V Pythonu je seznam sbírkou položek – stejných nebo různých datových typů. Jsou proměnlivé; můžete je upravit na místě, aniž byste museli vytvářet nový seznam.
Zvažte tento příklad ovoce: seznam 5 různých druhů ovoce.
fruits = ["apple","mango","strawberry","pomegranate","melon"]
Délku libovolného objektu Pythonu můžete získat pomocí vestavěné funkce len(). Takže můžete zavolat funkci len() s objektem seznamu (ovoce) jako argumentem pro získání její délky, jak je ukázáno níže.
len(fruits) # Output: 5
V tomto tutoriálu použijeme seznam ovoce jako běžící příklad.
Indexování v seznamech Pythonu
Python se řídí nulovým indexováním. Takže v jakékoli iterovatelné Pythonu je první položka na indexu 0, druhá položka je na indexu 1 atd. Pokud je délka iterovatelného prvku k, pak je poslední položka na indexu k – 1.
V Pythonu můžete použít funkci range() k získání indexů, když procházíte iterables.
Poznámka: Když procházíte rozsahem (k), získáte indexy 0,1,2,…,(k-1). Takže nastavením k = len(seznam) můžete získat seznam všech platných indexů.
Následující buňka kódu to vysvětluje.
for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon
Nyní, když jsme probrali základy Pythonových seznamů, pojďme se naučit, jak najít index položky v seznamu.
Najít index položky seznamu podle iterací pomocí pro smyčky
Podívejme se na seznam ovoce z předchozí části. Naučíme se, jak najít index konkrétní položky v tomto seznamu iterací pomocí cyklu for.
Použití pro funkce Loop a range().
Opravme cíl: hodnotu, kterou hledáme v seznamu.
Pro získání seznamu indexů od 0 do len(ovoce) – 1 můžete použít funkci for loop a range().
- Procházejte seznam ovoce s přístupem ke každému indexu.
- Zkontrolujte, zda se položka na aktuálním indexu i rovná cíli.
- Pokud je True, vytiskněte, že cíl byl nalezen na indexu i.
fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1
V tomto příkladu se cílový řetězec ‚mango‘ objeví přesně jednou (na indexu 1) v seznamu ovoce.
Někdy se však cílová hodnota objeví vícekrát nebo se nezobrazí vůbec. Abychom tyto případy zvládli, upravme výše uvedené opakování a zabalme obsah do funkce nazvané find_in_list.
Pochopení definice funkce
Funkce find_in_list má dva parametry:
- cíl: hodnota, kterou hledáte, a
- py_list: seznam Pythonu, který prohledáváte.
def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
V těle funkce inicializujeme prázdný seznam cílové_indexy. Procházíme seznam a přistupujeme k položkám seznamu. Pokud byl cíl nalezen v konkrétním indexu, přidáme tento index do seznamu target_indices pomocí metody append().
Poznámka: V Pythonu list.append(item) přidá položku na konec seznamu.
- Pokud cíl není nikdy nalezen, pak target_indices je prázdný seznam; uživatel je upozorněn, že cíl není přítomen v seznamu.
- Pokud je cíl nalezen na více než jednom indexu, pak target_indices obsahuje všechny tyto indexy.
Dále předefinujme seznam ovoce, jak je znázorněno.
Tentokrát hledáme cílový řetězec ‚mango‘, který se vyskytuje dvakrát — u indexů 1 a 4.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]
Při volání funkce find_in_list s cíl a ovoce jako argumenty vidíme, že jsou vráceny oba indexy.
target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!
Pokud se pokusíte vyhledat ‚tuřín‘, který není přítomen v seznamu ovoce, dostanete zprávu, že cíl nebyl nalezen.
Použití funkce for Loop a enumerate().
V Pythonu můžete použít funkci enumerate() pro současný přístup k indexu i položkám – aniž byste museli používat funkci range().
Následující buňka kódu ukazuje, jak můžete použít funkci enumerate() k získání indexů i položek.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon
Nyní přepišme funkci Python, abychom našli index položek v seznamu pomocí funkce enumerate().
def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
Stejně jako v předchozí části můžete nyní volat funkci find_in_list s platnými argumenty.
Výše uvedenou definici funkce můžete převést do ekvivalentního porozumění seznamu a uděláme to v další části.
Najít index položky seznamu podle iterací pomocí funkce List Comprehension
Seznamy v Pythonu umožňují vytvářet seznamy z existujících seznamů na základě nějaké podmínky. Zde je obecná konstrukce:
new_list = [<output> for <items in existing iterables> if <condition is true>]
Obrázek níže popisuje, jak identifikovat prvky porozumění seznamu; pomocí toho můžete převést funkci find_in_list na porozumění seznamu.
Při použití výše uvedeného je výraz pro pochopení seznamu pro vytvoření cílových indexů následující.
target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]
Jako cvičení můžete zkusit spustit výše uvedený fragment kódu pro několik dalších příkladů.
Najděte index položky seznamu pomocí metody index().
Chcete-li najít index položky v seznamu Python, můžete také použít vestavěnou metodu .index(). Zde je obecná syntaxe:
list.index(value,start,end)
Analýza výše uvedené metody:
- hodnota je cílová hodnota, kterou hledáte.
- začátek a konec jsou nepovinné poziční argumenty; můžete je použít k hledání indexu položky v řezu seznamu počínaje začátkem a sahajícím až ke konci – 1.
Poznámka: Metoda .index() vrací pouze index prvního výskytu hodnoty v seznamu. I když najdete index položky v řezu seznamu [start: end-1]tato metoda vrátí pouze index odpovídající prvnímu výskytu položky.
Vraťme se k našemu příkladu, abychom pochopili, jak metoda .index() funguje.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1
I když jsou v seznamu ovoce dva výskyty „manga“, můžete vidět, že byl vrácen pouze index prvního výskytu.
Chcete-li získat index druhého výskytu manga, můžeme prohledávat část seznamu začínající na indexu 2 a sahající až k indexu 5, jak je znázorněno níže.
fruits.index(target,2,5) 4
Jak zacházet s ValueErrors v Pythonu
Nyní se podívejme, co se stane, když se pokusíte najít index položky, která není přítomna v seznamu, řekněme „mrkev“.
target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list
Jak je vidět v buňce kódu výše, toto vyvolá a ValueError. V Pythonu to můžete zpracovat jako výjimku pomocí bloků try a Mimo.
Obecná syntaxe pro použití try-except je následující.
try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception
Pomocí výše uvedených bloků try-except můžeme zpracovat ValueError jako výjimku.
target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list
Výše uvedený kód dělá následující:
- Pokud je cíl přítomen v seznamu, vrátí index cíle.
- Pokud cíl není přítomen, zpracuje ValueError jako výjimku a vytiskne chybovou zprávu.
Shrnutí
Zde je souhrn různých metod, které jste se naučili najít index položky v seznamu Python.
- K získání položek a jejich příslušných indexů můžete použít cyklus for Pythonu a funkci range(). Zkontrolujte, zda položky na indexech odpovídají cíli.
- Pro současný přístup k položce a indexu můžete také použít funkci enumerate().
- Obě výše uvedené metody můžete použít uvnitř výrazu pro porozumění seznamu.
- Chcete-li najít index položky v seznamu, můžete také použít vestavěnou metodu .index().
- list.index(hodnota) vrací index prvního výskytu hodnoty v seznamu. Pokud hodnota není přítomna, vyvolá hodnotu ValueError.
- Můžete prohledávat určitou část seznamu pomocí list.index(hodnota, začátek, konec) k vyhledání výskytu hodnoty v části seznamu [start:end-1].
Dále se naučte třídit pythonovský slovník podle klíče nebo hodnoty. Šťastné programování v Pythonu!