4394 Stimmen

Wie finde ich den Index für ein bestimmtes Element in einer Liste?

Gegeben eine Liste ["foo", "bar", "baz"] und ein Element in der Liste "bar", wie erhalte ich seinen Index 1?

16 Stimmen

Übersetzung: Kehren Sie zurück: [1] Der niedrigste Index im Falle mehrerer Instanzen von "bar", [2] Alle Indizes von "bar"?

7 Stimmen

A) Ist es garantiert, dass der Eintrag in der Liste ist, oder wie sollten wir den Fehlerfall behandeln? (None zurückgeben/ ValueError werfen) b) Sind Listeneinträge garantiert einzigartig, und sollten wir den ersten Index eines Treffers zurückgeben oder alle Indizes?

1 Stimmen

Betrachten Sie die Antworten mit numpy-Integration, numpy-Arrays sind weitaus effizienter als Python-Listen. Wenn die Liste kurz ist, ist es kein Problem, eine Kopie davon aus einer Python-Liste zu machen. Wenn nicht, sollten Sie vielleicht erwägen, die Elemente gleich von Anfang an in einem numpy-Array zu speichern.

13voto

Hamed Baatour Punkte 6189

Die Python index() Methode wirft einen Fehler, wenn das Element nicht gefunden wurde. Stattdessen können Sie diese ähnlich wie die indexOf() Funktion in JavaScript gestalten, die -1 zurückgibt, wenn das Element nicht gefunden wurde:

def indexof(array, elem):
try:
    return array.index(elem)
except ValueError:
    return -1

8 Stimmen

Jedoch hat JavaScript die Philosophie, dass seltsame Ergebnisse besser sind als Fehler, daher macht es Sinn, -1 zurückzugeben, aber in Python kann dies einen schwer zu verfolgenden Fehler verursachen, da -1 ein Element vom Ende der Liste zurückgibt.

1 Stimmen

-1 ist kein seltsames Ergebnis in Java/JavaScript. Es ist eine sprachliche Konvention für "nicht in der Liste gefunden". Es ist möglich, diese Java-Intelligenz in Python zu verwenden, um eine einfache Überprüfung durchzuführen: if theindex > -1: oder if theindex >= 0: das gleiche macht.

12voto

Kofi Punkte 828

List Comprehension wäre die beste Option, um eine kompakte Implementierung zum Finden des Index eines Elements in einer Liste zu erhalten.

a_list = ["a", "b", "a"]
print([index for (index , item) in enumerate(a_list) if item == "a"])

0 Stimmen

Funktioniert auch gut für Ganzzahlen und Gleitkommazahlen, sowie für das Finden aller Vorkommen

11voto

Badri Paudel Punkte 998

Es besteht die Möglichkeit, dass dieser Wert nicht vorhanden ist. Um diesen ValueError zu vermeiden, können wir überprüfen, ob er tatsächlich in der Liste vorhanden ist.

list =  ["foo", "bar", "baz"]

item_to_find = "foo"

if item_to_find in list:
      index = list.index(item_to_find)
      print("Index des Elements ist " + str(index))
else:
    print("Dieses Wort existiert nicht")

0 Stimmen

Das Aufrufen einer Variablen list überschreibt eine integrierte Funktion. Das Aufrufen von in und dann index bedeutet, dass Sie zwei Suchvorgänge durchführen. Besser ist es, try/except für .index() zu verwenden, wie in anderen Threads vorgeschlagen.

9voto

Giacomo Casadei Punkte 1098

Es verwendet einfach die Python-Funktion array.index() und mit einem einfachen Try / Except gibt es die Position des Datensatzes zurück, wenn er in der Liste gefunden wird, und gibt -1 zurück, wenn er nicht in der Liste gefunden wird (wie in JavaScript mit der Funktion indexOf()).

fruits = ['apple', 'banana', 'cherry']

try:
  pos = fruits.index("mango")
except:
  pos = -1

In diesem Fall ist "mango" nicht in der Liste fruits vorhanden, daher ist die pos-Variable -1. Wenn ich nach "cherry" gesucht hätte, wäre die pos-Variable 2.

8voto

Ankit Gupta Punkte 480

Es gibt eine funktionellere Antwort darauf.

list(filter(lambda x: x[1]=="bar",enumerate(["foo", "bar", "baz", "bar", "baz", "bar", "a", "b", "c"])))

Allgemeinere Form:

def get_index_of(lst, element):
    return list(map(lambda x: x[0],\
       (list(filter(lambda x: x[1]==element, enumerate(lst))))))

1 Stimmen

Diese Antwort fühlt sich für Scala / funktionale Programmier-Enthusiasten wie zu Hause an

0 Stimmen

Wenn in einer Liste, die viele Übereinstimmungen hat, nur ein einziger Wert benötigt wird, dauert es lange.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X