Hvordan finne indeksen til et element i Python-lister

I denne veiledningen lærer du hvordan du finner indeksen til et element i en Python-liste, både ved hjelp av enkle iterasjoner og en innebygd listemetodeindeks().

Når du arbeider med Python-lister, må du kanskje finne ut indeksen der et bestemt element forekommer. Du kan gjøre dette ved å:

  • Gå gjennom listen og sjekke om elementet i gjeldende indeks er lik den aktuelle verdien
  • Bruke den innebygde listemetoden index()

Du vil lære begge de ovennevnte i denne opplæringen. La oss komme i gang.👩🏽‍💻

Python-lister, revisited

I Python er en liste en samling av elementer – av samme eller forskjellige datatyper. De er foranderlige; du kan endre dem på plass uten å måtte opprette en ny liste.

Tenk på dette eksempelet frukt: en liste over 5 forskjellige frukter.

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

Du kan få lengden på et hvilket som helst Python-objekt ved å bruke den innebygde len()-funksjonen. Så du kan kalle len()-funksjonen med listeobjektet (frukter) som argument for å få lengden, som vist nedenfor.

len(fruits)
# Output: 5

Vi bruker fruktlisten som et løpende eksempel i denne opplæringen.

Indeksering i Python-lister

Python følger null indeksering. Så i enhver Python iterable, er det første elementet på indeks 0, det andre elementet er på indeks 1, og så videre. Hvis lengden på den iterable er k, er det siste elementet på indeksen k – 1.

I Python kan du bruke range()-funksjonen for å få indekser mens du går gjennom iterables.

Merk: Når du går gjennom området (k), får du indeksene 0,1,2,…,(k-1). Så ved å sette k = len(liste), kan du få listen over alle gyldige indekser.

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

Nå som vi har dekket det grunnleggende om Python-lister, la oss lære hvordan du finner indeksen til et element i en liste.

  Level Up brukeropplevelse med disse 6 Gamification-programvarene

Finn indeks for et listeelement etter iterasjon ved å bruke for løkker

La oss vurdere listefruktene fra forrige seksjon. Vi lærer hvordan du finner indeksen til et spesifikt element i denne listen ved iterasjon ved å bruke for loop.

Bruker for Loop og range() funksjon

La oss fikse mål: verdien vi søker etter i listen.

Du kan bruke funksjonen for loop og range() for å få listen over indekser fra 0 til len(fruits) – 1.

  • Gå gjennom listen over frukt som har tilgang til hver indeks.
  • Sjekk om elementet ved gjeldende indeks i er lik målet.
  • Hvis True, skriv ut at målet er funnet ved indeksen 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 eksemplet vises målstrengen «mango» nøyaktig én gang (ved indeks 1) i listens frukter.

Noen ganger vises imidlertid målverdien mer enn én gang eller vises ikke i det hele tatt. For å håndtere disse tilfellene, la oss modifisere loopingen ovenfor og pakke innholdet inn i en funksjon kalt find_in_list.

Forstå funksjonsdefinisjonen

Funksjonen find_in_list har to parametere:

  • mål: verdien du søker etter, og
  • py_list: Python-listen du søker gjennom.
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 funksjonskroppen initialiserer vi en tom liste målindekser. Vi går gjennom listen og får tilgang til listeelementene. Hvis målet er funnet i en bestemt indeks, legger vi til den indeksen til listen target_indices ved å bruke append()-metoden.

Merk: I Python legger list.append(item) til et element på slutten av listen.

  • Hvis målet aldri blir funnet, er target_indices en tom liste; brukeren blir varslet om at målet ikke er til stede i listen.
  • Hvis målet er funnet i mer enn én indeks, inneholder target_indices alle disse indeksene.

La oss deretter omdefinere fruktlisten som vist.

Denne gangen søker vi etter målstrengen «mango», som forekommer to ganger – 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]

Ved å kalle funksjonen find_in_list med target og fruits som argumenter, ser vi at begge indeksene returneres.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Hvis du prøver å søke etter «nepe» som ikke finnes i fruktlisten, får du en melding om at målet ikke er funnet.

  Minecraft beacon oppskrift: konstruksjon og bruk

Bruker for Loop og enumerate() funksjon

I Python kan du bruke funksjonen enumerate() for å få tilgang til både indeksen og elementene samtidig – uten å måtte bruke range()-funksjonen.

Følgende kodecelle viser hvordan du kan bruke funksjonen enumerate() for å få både indeksene og elementene.

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

La oss nå omskrive Python-funksjonen for å finne indeksen over elementer i listen ved å bruke enumerate()-funksjonen.

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 forrige seksjon kan du nå kalle funksjonen find_in_list med gyldige argumenter.

Du kan oversette funksjonsdefinisjonen ovenfor til en tilsvarende listeforståelse, og vi vil gjøre det i neste avsnitt.

Finn indeks for et listeelement etter iterasjon ved å bruke listeforståelse

Listeforståelser i Python lar deg lage lister fra eksisterende lister basert på en eller annen betingelse. Her er den generelle konstruksjonen:

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

Figuren nedenfor beskriver hvordan du identifiserer elementene i listeforståelse; ved å bruke dette kan du konvertere funksjonen find_in_list til en listeforståelse.

Ved å bruke det ovenfor, er uttrykket for listeforståelse for å lage målindekser som følger.

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

Som en øvelse kan du prøve å kjøre kodebiten ovenfor for noen få andre eksempler.

Finn indeks for et listeelement ved å bruke index()-metoden

For å finne indeksen til et element i en Python-liste kan du også bruke den innebygde .index()-metoden. Her er den generelle syntaksen:

list.index(value,start,end)

Parsing av metoden ovenfor:

  • verdi er målverdien du søker etter.
  • start og slutt er valgfrie posisjonsargumenter; du kan bruke dem til å søke finne indeksen til et element i listestykket som starter ved start og strekker seg opp til slutt – 1.
  Hvordan finne modellnummeret på en bærbar datamaskin

Merk: .index()-metoden returnerer bare indeksen for den første forekomsten av verdi i listen. Selv når du finner indeksen til et element i et listestykke [start: end-1]returnerer denne metoden bare indeksen som tilsvarer den første forekomsten av varen.

La oss se på eksemplet vårt på nytt for å forstå hvordan .index()-metoden fungerer.

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

fruits.index(target)
1

Selv om det er to forekomster av «mango» i fruktlisten, kan du se at bare indeksen for den første forekomsten har blitt returnert.

For å få indeksen for den andre forekomsten av mango, kan vi søke gjennom listestykket som starter ved indeks 2 og strekker seg opp til indeks 5, som vist nedenfor.

fruits.index(target,2,5)
4

Hvordan håndtere ValueErrors i Python

La oss nå se hva som skjer hvis du prøver å finne indeksen til et element som ikke er til stede i listen, for eksempel «gulrot».

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 vist i kodecellen ovenfor, kaster dette en ValueError. I Python kan du håndtere dette som et unntak ved å bruke prøve- og unntaksblokkene.

Den generelle syntaksen for å bruke try-except er som følger.

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

Ved å bruke de ovennevnte prøve-unntatt-blokkene kan vi håndtere ValueError som et unntak.

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

Koden ovenfor gjør følgende:

  • Hvis målet er til stede i listen, returnerer det indeksen til målet.
  • Hvis målet ikke er til stede, håndterer det ValueError som et unntak og skriver ut feilmeldingen.

Oppsummering

Her er et sammendrag av de forskjellige metodene du har lært for å finne indeksen til et element i en Python-liste.

  • Du kan bruke Pythons for loop og range() funksjon for å få elementene og deres respektive indekser. Sjekk om elementene på indeksene samsvarer med målet.
  • Du kan også bruke funksjonen enumerate() for å få tilgang til elementet og indeksen samtidig.
  • Du kan bruke begge metodene ovenfor i et listeforståelsesuttrykk.
  • For å finne et elements indeks i en liste, kan du også bruke den innebygde .index()-metoden.
  • list.index(value) returnerer indeksen for den første forekomsten av verdi i listen. Hvis verdien ikke er tilstede, oppstår en ValueError.
  • Du kan søke gjennom en bestemt del av listen ved å bruke list.index(verdi, start, slutt) for å søke etter forekomsten av en verdi i listestykket [start:end-1].

Deretter lærer du å sortere en Python-ordbok etter nøkkel eller verdi. Lykke til med Python-programmering!