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.

56voto

Graham Giller Punkte 577

Alle hier vorgeschlagenen Funktionen reproduzieren das inhärente Sprachverhalten, aber verschleiern, was passiert.

[i für i in Bereich(len(mylist)) if mylist[i]==myterm]  # die Indizes erhalten

[jedes für jedes in mylist if jedes==myterm]             # die Elemente erhalten

mylist.index(myterm) if myterm in mylist else None    # den ersten Index erhalten und leise fehlschlagen

Warum eine Funktion mit Ausnahmeverarbeitung schreiben, wenn die Sprache bereits die Methoden bereitstellt, um das Gewünschte zu tun?

11 Stimmen

Ist die dritte Methode zweimal über die Liste iteriert, richtig?

1 Stimmen

Re: "Alle hier vorgeschlagenen Funktionen": Zum Zeitpunkt des Schreibens vielleicht, aber Sie sollten neuere Antworten überprüfen, um zu sehen, ob es noch stimmt.

35voto

PythonProgrammi Punkte 20089

Alle Vorkommen und die Position eines oder mehrerer (identischer) Elemente in einer Liste erhalten

Mit enumerate(alist) können Sie das erste Element (n) speichern, das der Index der Liste ist, wenn das Element x dem entspricht, wonach Sie suchen.

>>> alist = ['foo', 'spam', 'egg', 'foo']
>>> foo_indexes = [n for n,x in enumerate(alist) if x=='foo']
>>> foo_indexes
[0, 3]
>>>

Lassen Sie uns unsere Funktion findindex erstellen

Diese Funktion nimmt das Element und die Liste als Argumente entgegen und gibt die Position des Elements in der Liste zurück, wie wir zuvor gesehen haben.

def indexlist(item2find, list_or_string):
  "Gibt alle Indizes eines Elements in einer Liste oder einem String zurück"
  return [n for n,item in enumerate(list_or_string) if item==item2find]

print(indexlist("1", "010101010"))

Ausgabe


[1, 3, 5, 7]

Einfach

for n, i in enumerate([1, 2, 3, 4, 1]):
    if i == 1:
        print(n)

Ausgabe:

0
4

2 Stimmen

Diese Antwort sollte besser hier gepostet werden: stackoverflow.com/questions/6294179/…

27voto

Alle Indizes mit der zip Funktion:

get_indexes = lambda x, xs: [i for (y, i) in zip(xs, range(len(xs))) if x == y]

print get_indexes(2, [1, 2, 3, 4, 5, 6, 3, 2, 3, 2])
print get_indexes('f', 'xsfhhttytffsafweef')

3 Stimmen

Diese Antwort sollte hier besser veröffentlicht werden: stackoverflow.com/questions/6294179/…

0 Stimmen

enumerate(xs) ist klarer als zip(xs, range(len(xs)). Außerdem beantwortet das nicht die Frage.

26voto

kiriloff Punkte 24291

Einfach kannst du gehen mit

a = [['hand', 'head'], ['phone', 'wallet'], ['lost', 'stock']]
b = ['phone', 'lost']

res = [[x[0] for x in a].index(y) for y in b]

22voto

Mathitis2Software Punkte 561

Eine andere Option

>>> a = ['rot', 'blau', 'grün', 'rot']
>>> b = 'rot'
>>> offset = 0;
>>> indices = list()
>>> for i in range(a.count(b)):
...     indices.append(a.index(b,offset))
...     offset = indices[-1]+1
... 
>>> indices
[0, 3]
>>>

3 Stimmen

Diese Antwort sollte besser hier veröffentlicht werden: stackoverflow.com/questions/6294179/…

0 Stimmen

Was hat das mit der Frage zu tun?

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