Cum să găsiți indexul unui articol în listele Python

În acest ghid, veți învăța cum să găsiți indexul unui element într-o listă Python, atât folosind iterații simple, cât și o metodă de listă încorporată index().

Când lucrați cu liste Python, poate fi necesar să aflați indexul la care apare un anumit element. Puteți face acest lucru prin:

  • Parcurgerea listei și verificarea dacă elementul din indexul curent este egal cu valoarea anume
  • Folosind metoda listă încorporată index()

Veți învăța ambele cele de mai sus în acest tutorial. Să începem.👩🏽‍💻

Liste Python, revizuite

În Python, o listă este o colecție de articole — de aceleași tipuri de date sau diferite. Sunt mutabili; le puteți modifica la locul lor fără a fi nevoie să creați o nouă listă.

Luați în considerare acest exemplu de fructe: o listă de 5 fructe diferite.

fruits = ["apple","mango","strawberry","pomegranate","melon"]

Puteți obține lungimea oricărui obiect Python utilizând funcția încorporată len(). Deci, puteți apela funcția len() cu obiectul listă (fructe) ca argument pentru a obține lungimea acesteia, așa cum se arată mai jos.

len(fruits)
# Output: 5

Vom folosi lista de fructe ca exemplu de rulare în acest tutorial.

Indexarea în listele Python

Python urmează indexarea zero. Deci, în orice iterabil Python, primul element este la indexul 0, al doilea element este la indexul 1 și așa mai departe. Dacă lungimea iterabilului este k, atunci ultimul element se află la indicele k – 1.

În Python, puteți utiliza funcția range() pentru a obține indici pe măsură ce parcurgeți iterabile.

Notă: Când treceți prin intervalul (k), obțineți indicii 0,1,2,…,(k-1). Deci, setând k = len(list), puteți obține lista tuturor indicilor validi.

Următoarea celulă de cod explică acest lucru.

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

Acum că am acoperit elementele de bază ale listelor Python, să învățăm cum să găsim indexul unui element dintr-o listă.

Găsiți indexul unui element din listă prin iterație folosind for Loops

Să luăm în considerare lista de fructe din secțiunea anterioară. Vom învăța cum să găsim indexul unui anumit articol din această listă prin iterație folosind bucla for.

Folosind funcția for Loop și range().

Să reparăm ținta: valoarea pe care o căutăm în listă.

Puteți folosi funcția for loop și range() pentru a obține lista de indici de la 0 la len(fructe) – 1.

  • Parcurgeți lista de fructe care accesează fiecare index.
  • Verificați dacă elementul de la indicele curent i este egal cu ținta.
  • Dacă este adevărat, imprimați că ținta a fost găsită la indexul 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

În acest exemplu, șirul țintă „mango” apare exact o dată (la indexul 1) în lista fructelor.

Cu toate acestea, uneori, valoarea țintă apare de mai multe ori sau nu apare deloc. Pentru a gestiona aceste cazuri, să modificăm bucla de mai sus și să încapsulăm conținutul într-o funcție numită find_in_list.

Înțelegerea definiției funcției

Funcția find_in_list are doi parametri:

  • țintă: valoarea pe care o căutați și
  • py_list: lista Python prin care căutați.
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}")

În corpul funcției, inițializam o listă goală target_indices. Parcurgem lista și accesăm elementele din listă. Dacă ținta a fost găsită la un anumit index, adăugăm acel index la lista target_indices folosind metoda append().

Notă: În Python, list.append(item) adaugă element la sfârșitul listei.

  • Dacă ținta nu este găsită niciodată, atunci target_indices este o listă goală; utilizatorul este notificat că ținta nu este prezentă în listă.
  • Dacă ținta este găsită la mai mulți indici, atunci target_indices conține toți acești indici.

Apoi, să redefinim lista de fructe așa cum se arată.

De data aceasta, căutăm șirul țintă „mango”, care apare de două ori — la indicii 1 și 4.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"
find_in_list(target,fruits)

# Output
mango is found at indices [1, 4]

Apelând funcția find_in_list cu țintă și fructe ca argumente, vedem că ambii indici sunt returnați.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Dacă încercați să căutați „nap” care nu este prezent în lista de fructe, veți primi un mesaj că ținta nu a fost găsită.

Folosind funcția for Loop și enumerate().

În Python, puteți utiliza funcția enumerate() pentru a accesa atât indexul, cât și elementele simultan, fără a fi nevoie să utilizați funcția range().

Următoarea celulă de cod arată cum puteți utiliza funcția enumerate() pentru a obține atât indici, cât și elemente.

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

Acum, să rescriem funcția Python pentru a găsi indexul elementelor din listă folosind funcția 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}")

Ca și în secțiunea anterioară, acum puteți apela funcția find_in_list cu argumente valide.

Puteți traduce definiția funcției de mai sus într-o înțelegere echivalentă a listei și vom face asta în secțiunea următoare.

Găsiți indexul unui articol din listă prin iterație utilizând Lista de înțelegere

Listele de înțelegere în Python vă permit să creați liste din liste existente pe baza unor condiții. Iată construcția generală:

new_list = [<output> for <items in existing iterables> if <condition is true>] 

Figura de mai jos descrie modul de identificare a elementelor de înțelegere a listei; folosind aceasta, puteți converti funcția find_in_list într-o listă de înțelegere.

Folosind cele de mai sus, expresia pentru înțelegerea listelor pentru a crea indici țintă este următoarea.

target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

Ca exercițiu, puteți încerca să rulați fragmentul de cod de mai sus pentru alte câteva exemple.

Găsiți indexul unui element din listă folosind metoda index().

Pentru a găsi indexul unui element dintr-o listă Python, puteți utiliza și metoda încorporată .index(). Iată sintaxa generală:

list.index(value,start,end)

Analizând metoda de mai sus:

  • valoare este valoarea țintă pe care o căutați.
  • începutul și sfârșitul sunt argumente poziționale opționale; le puteți folosi pentru a căuta, găsiți indexul unui articol în porțiunea de listă începând de la început și extinzându-se până la sfârșit – 1.

Notă: Metoda .index() returnează numai indexul primei apariții a valorii din listă. Chiar și atunci când găsiți indexul unui articol într-o secțiune de listă [start: end-1]această metodă returnează doar indexul corespunzător primei apariții a articolului.

Să revedem exemplul nostru pentru a înțelege cum funcționează metoda .index().

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"

fruits.index(target)
1

Chiar dacă există două apariții de „mango” în lista de fructe, puteți vedea că doar indexul primei apariții a fost returnat.

Pentru a obține indicele celei de-a doua apariții de mango, putem căuta prin porțiunea de listă începând cu indexul 2 și extinzându-se până la indicele 5, așa cum se arată mai jos.

fruits.index(target,2,5)
4

Cum să gestionați ValueErrors în Python

Acum să vedem ce se întâmplă dacă încercați să găsiți indexul unui element care nu este prezent în listă, să zicem „morcov”.

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

După cum se vede în celula de cod de mai sus, aceasta aruncă a ValueError. În Python, puteți gestiona acest lucru ca o excepție folosind blocurile try și except.

Sintaxa generală de utilizat try-except este următoarea.

try:
  # to do this
except <ErrorType>:
  # do this to handle <ErrorType> as exception

Folosind blocurile try-except de mai sus, putem trata ValueError ca o excepție.

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

Codul de mai sus face următoarele:

  • Dacă ținta este prezentă în listă, returnează indexul țintei.
  • Dacă ținta nu este prezentă, tratează ValueError ca o excepție și tipărește mesajul de eroare.

Rezumând

Iată un rezumat al diferitelor metode pe care le-ați învățat pentru a găsi indexul unui element dintr-o listă Python.

  • Puteți folosi funcția Python for loop și range() pentru a obține elementele și indicii lor respectivi. Verificați dacă elementele de la indici se potrivesc cu ținta.
  • De asemenea, puteți utiliza funcția enumerate() pentru a accesa simultan articolul și indexul.
  • Puteți utiliza ambele metode de mai sus în interiorul unei expresii de înțelegere a listei.
  • Pentru a găsi indexul unui articol într-o listă, puteți utiliza și metoda încorporată .index().
  • list.index(valoare) returnează indexul primei apariții a valorii din listă. Dacă valoarea nu este prezentă, se afișează o valoare ValueError.
  • Puteți căuta printr-o anumită porțiune a listei folosind list.index(value, start, end) pentru a căuta apariția unei valori în porțiunea de listă [start:end-1].

Apoi, învață să sortezi un dicționar Python după cheie sau după valoare. Programare Python fericită!