So finden Sie den Index eines Elements in Python-Listen

In dieser Anleitung erfahren Sie, wie Sie die Position eines Elements in einer Python-Liste ermitteln können. Wir werden sowohl einfache Iterationsmethoden als auch die integrierte Listenmethode index() verwenden.

Bei der Arbeit mit Python-Listen ist es oft notwendig, die genaue Position, also den Index, eines bestimmten Elements herauszufinden. Dies kann auf zwei Arten erfolgen:

  • Man iteriert durch die Liste und überprüft, ob das Element am aktuellen Index mit dem gesuchten Wert übereinstimmt.
  • Man nutzt die eingebaute Methode index() der Liste.

In diesem Tutorial werden wir beide Ansätze erkunden. Beginnen wir! 👩🏽‍💻

Ein kurzer Überblick über Python-Listen

In Python ist eine Liste eine geordnete Sammlung von Elementen, die unterschiedliche Datentypen haben können. Listen sind „mutable“, das heißt, sie können direkt verändert werden, ohne eine neue Liste erstellen zu müssen.

Betrachten wir zum Beispiel eine Liste mit fünf verschiedenen Früchten:

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

Die Länge einer Python-Liste lässt sich mit der integrierten Funktion len() ermitteln. Diese Funktion gibt die Anzahl der Elemente in der Liste zurück. Bei unserer Fruchtliste würde sie beispielsweise 5 zurückgeben.

len(fruits)
# Ausgabe: 5

Wir werden diese Fruchtliste im Laufe dieses Tutorials als praktisches Beispiel verwenden.

Indizierung in Python-Listen

In Python beginnt die Indizierung bei Null. Das bedeutet, dass das erste Element in jeder Liste den Index 0 hat, das zweite den Index 1 und so weiter. Wenn eine Liste k Elemente hat, hat das letzte Element den Index k – 1.

Die Funktion range() ist nützlich, um Indizes zu generieren, wenn man durch iterierbare Objekte geht.

Wenn man range(k) verwendet, erhält man die Indizes 0, 1, 2, …, k-1. Wenn also k die Länge der Liste ist, erhält man alle gültigen Indizes.

Das folgende Codebeispiel verdeutlicht dies:

for i in range(len(fruits)):
  print(f"i:{i}, fruit[{i}] is {fruits[i]}")

# Ausgabe
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

Nachdem wir die Grundlagen der Python-Listen behandelt haben, wollen wir uns nun ansehen, wie man den Index eines bestimmten Elements in einer Liste findet.

Den Index eines Elements durch Iteration mit for-Schleifen finden

Wir werden die Fruchtliste aus dem vorherigen Abschnitt als Grundlage verwenden, um zu demonstrieren, wie man den Index eines bestimmten Elements mithilfe einer for-Schleife finden kann.

Verwendung von for-Schleife und range()-Funktion

Zunächst definieren wir das Element, dessen Position wir in der Liste suchen möchten.

Die Funktion for in Kombination mit range() ermöglicht es uns, die Liste der Indizes von 0 bis zur Länge der Liste minus 1 zu erhalten.

  • Wir durchlaufen die Liste und greifen dabei auf jedes Element über seinen Index zu.
  • Wir überprüfen, ob das Element am aktuellen Index i mit dem gesuchten Element übereinstimmt.
  • Wenn die Bedingung erfüllt ist, geben wir aus, dass das Element am Index i gefunden wurde.
fruits = ["apple","mango","strawberry","pomegranate","melon"]

target = "mango"

for i in range(len(fruits)):
  if fruits[i] == target:
   print(f"{target} wurde am Index {i} gefunden")

# Ausgabe
mango wurde am Index 1 gefunden

In diesem Beispiel kommt das Element „mango“ genau einmal an der Position 1 vor.

In manchen Fällen kann es vorkommen, dass ein gesuchtes Element mehrfach oder gar nicht in der Liste vorkommt. Um diese Fälle zu berücksichtigen, erweitern wir die obige Schleife und kapseln den Code in einer Funktion namens find_in_list.

Verständnis der Funktionsdefinition

Die Funktion find_in_list nimmt zwei Parameter entgegen:

  • target: das zu suchende Element.
  • py_list: die Python-Liste, in der gesucht wird.
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("Das gesuchte Element wurde leider nicht gefunden!")
  else:
    print(f"{target} wurde an den Indizes {target_indices} gefunden")

Innerhalb der Funktion wird eine leere Liste target_indices initialisiert. Die Funktion durchläuft die Liste und greift auf die Elemente zu. Wenn ein Element mit dem Ziel übereinstimmt, wird dessen Index mit der Methode append() zur Liste target_indices hinzugefügt.

In Python fügt list.append(item) ein Element am Ende der Liste hinzu.

  • Wenn das Ziel nicht gefunden wird, bleibt target_indices leer, und es wird eine Meldung ausgegeben, dass das Element nicht in der Liste vorhanden ist.
  • Wenn das Ziel an mehreren Indizes gefunden wird, enthält target_indices alle diese Indizes.

Nun definieren wir die Fruchtliste neu:

Diesmal suchen wir nach dem Element „mango“, das zweimal vorkommt – an den Indizes 1 und 4.

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

# Ausgabe
mango wurde an den Indizes [1, 4] gefunden

Wenn wir die Funktion find_in_list mit dem Ziel und der Fruchtliste aufrufen, werden die beiden entsprechenden Indizes zurückgegeben.

target = "turnip"
find_in_list(target,fruits)

# Ausgabe
Das gesuchte Element wurde leider nicht gefunden!

Versuchen wir nun, nach „turnip“ zu suchen, einem Element, das nicht in der Fruchtliste vorhanden ist, erhalten wir eine entsprechende Meldung.

Verwendung von for-Schleife und enumerate()-Funktion

Die Python-Funktion enumerate() ermöglicht es, gleichzeitig auf den Index und die Elemente einer Liste zuzugreifen, ohne die Funktion range() zu verwenden.

Das folgende Codebeispiel zeigt, wie enumerate() verwendet wird, um sowohl Indizes als auch Elemente zu erhalten.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
for index,fruit in enumerate(fruits):
  print(f"Index {index}: {fruit}")

# Ausgabe
Index 0: apple
Index 1: mango
Index 2: strawberry
Index 3: pomegranate
Index 4: mango
Index 5: melon

Nun schreiben wir die Python-Funktion zur Bestimmung des Index von Elementen in einer Liste mithilfe der Funktion enumerate() neu.

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("Das gesuchte Element wurde leider nicht gefunden!")
  else:
    print(f"{target} wurde an den Indizes {target_indices} gefunden")

Wie im vorherigen Abschnitt können wir die Funktion find_in_list mit gültigen Argumenten aufrufen.

Die oben definierte Funktion lässt sich auch in eine Listen-Comprehension übersetzen, was wir im nächsten Abschnitt zeigen werden.

Den Index eines Elements mit Listen-Comprehension finden

Listen-Comprehensions sind eine kompakte Methode, um in Python Listen auf der Basis vorhandener Listen zu erstellen. Hier ist die allgemeine Syntax:

new_list = [<Ausdruck> for <Elemente in iterierbarem Objekt> if <Bedingung>]

Die folgende Abbildung verdeutlicht die verschiedenen Bestandteile einer Listen-Comprehension. Damit können wir die Funktion find_in_list in eine Listen-Comprehension umwandeln.

Basierend auf dem obigen Diagramm, können wir den Ausdruck für die Listen-Comprehension zur Erstellung von Zielindizes wie folgt schreiben:

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

Sie können versuchen, dieses Code-Snippet mit verschiedenen Beispielen auszuführen, um die Funktion besser zu verstehen.

Den Index eines Listenelements mit der Methode index() finden

Um den Index eines Elements in einer Python-Liste zu finden, kann auch die integrierte Methode .index() verwendet werden. Hier ist die allgemeine Syntax:

list.index(value,start,end)

Erläuterung der Methode:

  • value ist das Element, nach dem gesucht wird.
  • start und end sind optionale Positionsargumente; sie können verwendet werden, um den Index eines Elements in einem bestimmten Abschnitt der Liste von start bis end-1 zu suchen.

Wichtig: Die Methode .index() gibt nur den Index des ersten Vorkommens des Elements in der Liste zurück. Auch wenn man in einem Teilstück der Liste sucht [start: end-1], wird nur der Index des ersten Vorkommens zurückgegeben.

Schauen wir uns unser Beispiel erneut an, um die Funktionsweise der Methode .index() besser zu verstehen.

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

fruits.index(target)
# Ausgabe: 1

Obwohl „mango“ zweimal in der Fruchtliste vorkommt, sehen wir, dass nur der Index des ersten Vorkommens zurückgegeben wird.

Um den Index des zweiten Vorkommens von „mango“ zu erhalten, können wir den Abschnitt der Liste vom Index 2 bis Index 5 durchsuchen, wie unten gezeigt:

fruits.index(target,2,5)
# Ausgabe: 4

Umgang mit ValueErrors in Python

Sehen wir uns nun an, was passiert, wenn wir versuchen, den Index eines Elements zu finden, das nicht in der Liste vorhanden ist, wie z.B. „carrot“:

target = "carrot"

fruits.index(target)

# Ausgabe
---------------------------------------------------------------------------
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

Wie im obigen Code zu sehen, wird ein ValueError ausgelöst. In Python können wir dieses Verhalten als Ausnahme behandeln, indem wir die try- und except-Blöcke verwenden.

Die allgemeine Syntax zur Verwendung von try-except sieht folgendermaßen aus:

try:
  # auszuführender Code
except <ErrorType>:
  # Code zur Behandlung des Fehlers <ErrorType>

Mit den try-except Blöcken können wir ValueError als Ausnahme abfangen.

target = "carrot"
try:
  fruits.index(target)
except ValueError:
  print(f"Das Element {target} wurde leider nicht in der Liste gefunden")

# Ausgabe
Das Element carrot wurde leider nicht in der Liste gefunden

Der Code bewirkt Folgendes:

  • Wenn das Ziel in der Liste gefunden wird, wird der Index des Ziels zurückgegeben.
  • Wenn das Ziel nicht vorhanden ist, wird der Fehler ValueError als Ausnahme abgefangen und eine entsprechende Fehlermeldung ausgegeben.

Zusammenfassung

Hier ist eine Zusammenfassung der verschiedenen Methoden, die wir besprochen haben, um den Index eines Elements in einer Python-Liste zu finden:

  • Wir können die for-Schleife in Verbindung mit range() nutzen, um die Elemente und ihre jeweiligen Indizes abzurufen und zu überprüfen, ob die Elemente an den bestimmten Indizes mit dem Ziel übereinstimmen.
  • Die Funktion enumerate() ermöglicht es uns, sowohl auf das Element als auch den Index gleichzeitig zuzugreifen.
  • Beide Methoden können auch in einer Listen-Comprehension verwendet werden.
  • Die integrierte Methode .index() kann zur Bestimmung des Index eines Elements in einer Liste verwendet werden.
  • list.index(value) gibt den Index des ersten Vorkommens von value in der Liste zurück. Wenn der Wert nicht existiert, wird ValueError ausgelöst.
  • list.index(value, start, end) durchsucht einen bestimmten Teil der Liste [start:end-1] nach dem Vorkommen des Werts.

Im nächsten Schritt werden wir uns damit beschäftigen, wie man ein Python-Dictionary nach Schlüssel oder Wert sortiert. Viel Spaß beim Programmieren mit Python!