Sådan finder du indekset for et element i Python-lister

I denne guide lærer du, hvordan du finder indekset for et element i en Python-liste, både ved hjælp af simple iterationer og en indbygget listemetode index().

Når du arbejder med Python-lister, skal du muligvis finde ud af det indeks, hvor et bestemt element forekommer. Du kan gøre dette ved at:

  • Går gennem listen og kontrollerer, om elementet i det aktuelle indeks er lig med den pågældende værdi
  • Brug af den indbyggede listemetode index()

Du lærer begge ovenstående i denne tutorial. Lad os komme i gang.👩🏽‍💻

Python-lister, genbesøgt

I Python er en liste en samling af elementer – af samme eller forskellige datatyper. De er foranderlige; du kan ændre dem på plads uden at skulle oprette en ny liste.

Overvej dette eksempel frugter: en liste over 5 forskellige frugter.

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

Du kan få længden af ​​ethvert Python-objekt ved at bruge den indbyggede len()-funktion. Så du kan kalde len()-funktionen med listeobjektet (frugter) som argument for at få dens længde, som vist nedenfor.

len(fruits)
# Output: 5

Vi bruger frugtlisten som et kørende eksempel i denne tutorial.

Indeksering i Python-lister

Python følger nul indeksering. Så i enhver iterabel Python er det første element ved indeks 0, det andet element er ved indeks 1, og så videre. Hvis længden af ​​den iterable er k, er den sidste post ved indekset k – 1.

I Python kan du bruge range()-funktionen til at få indekser, mens du går gennem iterables.

Bemærk: Når du går gennem område(k), får du indekserne 0,1,2,…,(k-1). Så ved at sætte k = len(liste), kan du få listen over alle gyldige indekser.

Den følgende kodecelle forklarer dette.

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

Nu hvor vi har dækket det grundlæggende i Python-lister, lad os lære, hvordan man finder indekset for et element på en liste.

  Hvad er Clock Interrupt?

Find indeks over et listeelement efter iteration ved brug af loops

Lad os overveje listens frugter fra det foregående afsnit. Vi lærer, hvordan man finder indekset for et specifikt element på denne liste ved iteration ved hjælp af for loop.

Brug for Loop og range() Funktion

Lad os rette mål: den værdi, vi søger efter på listen.

Du kan bruge funktionen for loop og range() til at få listen over indekser fra 0 til len(frugt) – 1.

  • Gå gennem listen over frugter, der har adgang til hvert indeks.
  • Tjek, om emnet ved det aktuelle indeks i er lig med målet.
  • Hvis True, udskriv at målet er fundet ved indekset 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

I dette eksempel vises målstrengen ‘mango’ nøjagtigt én gang (ved indeks 1) i listens frugter.

Men nogle gange vises målværdien mere end én gang eller vises slet ikke. For at håndtere disse tilfælde, lad os ændre ovenstående looping og pakke indholdet ind i en funktion kaldet find_in_list.

Forstå funktionsdefinitionen

Funktionen find_in_list har to parametre:

  • mål: den værdi, du søger efter, og
  • py_list: Python-listen, som du søger igennem.
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}")

I funktionslegemet initialiserer vi en tom liste målindekser. Vi går gennem listen og får adgang til listepunkterne. Hvis målet er fundet ved et bestemt indeks, tilføjer vi det indeks til target_indices listen ved hjælp af append() metoden.

Bemærk: I Python tilføjer list.append(item) et element til slutningen af ​​listen.

  • Hvis målet aldrig bliver fundet, så er target_indices en tom liste; brugeren får besked om, at målet ikke er til stede på listen.
  • Hvis målet findes i mere end ét indeks, så indeholder target_indices alle disse indekser.

Lad os derefter omdefinere frugtlisten som vist.

Denne gang søger vi efter målstrengen ‘mango’, som forekommer to gange – ved indeks 1 og 4.

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

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

Når vi kalder funktionen find_in_list med target og fruits som argumenter, ser vi, at begge indekser returneres.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Hvis du prøver at søge efter ‘roer’, som ikke er til stede i frugtlisten, får du en besked om, at målet ikke er fundet.

  Sådan skærmoptages på iPhone

Brug for Loop og enumerate() Funktion

I Python kan du bruge enumerate()-funktionen til at få adgang til både indekset og elementerne samtidigt – uden at skulle bruge range()-funktionen.

Den følgende kodecelle viser, hvordan du kan bruge funktionen enumerate() til at få både indekserne og elementerne.

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

Lad os nu omskrive Python-funktionen for at finde indekset for elementer på listen ved hjælp af enumerate()-funktionen.

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}")

Som med det forrige afsnit kan du nu kalde funktionen find_in_list med gyldige argumenter.

Du kan oversætte ovenstående funktionsdefinition til en tilsvarende listeforståelse, og det gør vi i næste afsnit.

Find indeks over et listeelement efter iteration ved hjælp af listeforståelse

Listeforståelser i Python giver dig mulighed for at oprette lister fra eksisterende lister baseret på en eller anden betingelse. Her er den generelle konstruktion:

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

Figuren nedenfor beskriver, hvordan man identificerer elementerne i listeforståelse; ved at bruge dette kan du konvertere funktionen find_in_list til en listeforståelse.

Ved at bruge ovenstående er udtrykket for listeforståelse for at skabe målindeks som følger.

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

Som en øvelse kan du prøve at køre ovenstående kodestykke for et par andre eksempler.

Find indeks for et listeelement ved hjælp af index()-metoden

For at finde indekset for et element i en Python-liste kan du også bruge den indbyggede .index()-metode. Her er den generelle syntaks:

list.index(value,start,end)

Parsing af ovenstående metode:

  • værdi er den målværdi, du søger efter.
  • start og slut er valgfri positionsargumenter; du kan bruge dem til at søge finde indekset for et element i listeudsnittet, der starter ved start og strækker sig op til slutningen – 1.
  13 omkostningseffektive e-mail-marketingplatforme til bloggere

Bemærk: .index()-metoden returnerer kun indekset for den første forekomst af værdi i listen. Selv når du finder indeks over et element i et listeudsnit [start: end-1]returnerer denne metode kun det indeks, der svarer til den første forekomst af varen.

Lad os se vores eksempel igen for at forstå, hvordan .index()-metoden fungerer.

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

fruits.index(target)
1

Selvom der er to forekomster af ‘mango’ i frugtlisten, kan du se, at kun indekset for den første forekomst er blevet returneret.

For at få indekset for den anden forekomst af mango, kan vi søge gennem listeudsnittet, der starter ved indeks 2 og strækker sig op til indeks 5, som vist nedenfor.

fruits.index(target,2,5)
4

Sådan håndteres ValueErrors i Python

Lad os nu se, hvad der sker, hvis du prøver at finde indekset for et element, der ikke er til stede på listen, f.eks. “gulerod”.

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

Som det ses i kodecellen ovenfor, kaster dette en ValueError. I Python kan du håndtere dette som en undtagelse ved at bruge prøve- og undtagen-blokkene.

Den generelle syntaks for at bruge try-except er som følger.

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

Ved at bruge ovenstående try-except-blokke kan vi håndtere ValueError som en undtagelse.

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

Ovenstående kode gør følgende:

  • Hvis målet er til stede på listen, returnerer det målets indeks.
  • Hvis målet ikke er til stede, håndterer det ValueError som en undtagelse og udskriver fejlmeddelelsen.

Opsummering

Her er en oversigt over de forskellige metoder, du har lært til at finde indekset for et element i en Python-liste.

  • Du kan bruge Pythons for loop og range() funktion til at få elementerne og deres respektive indekser. Tjek om emnerne på indeksene matcher målet.
  • Du kan også bruge enumerate()-funktionen til samtidig at få adgang til elementet og indekset.
  • Du kan bruge begge ovenstående metoder inde i et listeforståelsesudtryk.
  • For at finde et elements indeks på en liste kan du også bruge den indbyggede .index() metode.
  • liste.indeks(værdi) returnerer indekset for den første forekomst af værdi i listen. Hvis værdien ikke er til stede, rejser det en ValueError.
  • Du kan søge gennem et bestemt udsnit af listen ved at bruge list.index(værdi, start, slut) for at søge efter forekomsten af ​​en værdi i listeudsnittet [start:end-1].

Lær derefter at sortere en Python-ordbog efter nøgle eller værdi. God Python-programmering!