Jak najít index položky v seznamech Pythonu

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.👩🏽‍💻

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.

  Jak používat at a dávkovat v Linuxu k plánování příkazů

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.

  Jak vytvořit profil iMessage na iPhone a iPad

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.
  Jak blokovat Trackery ve Firefoxu (bez instalace doplňků)

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!