Gegeben eine Liste ["foo", "bar", "baz"]
und ein Element in der Liste "bar"
, wie erhalte ich seinen Index 1
?
Ist die dritte Methode zweimal über die Liste iteriert, richtig?
Gegeben eine Liste ["foo", "bar", "baz"]
und ein Element in der Liste "bar"
, wie erhalte ich seinen Index 1
?
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?
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]
>>>
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]
for n, i in enumerate([1, 2, 3, 4, 1]):
if i == 1:
print(n)
Ausgabe:
0
4
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')
Diese Antwort sollte hier besser veröffentlicht werden: stackoverflow.com/questions/6294179/…
Diese Antwort sollte besser hier veröffentlicht werden: stackoverflow.com/questions/6294179/…
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.
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.
1 Stimmen
Ich stimme dafür, diese Frage zu schließen (aus Protest), weil es bereits 42 nicht gelöschte Antworten gibt (und 16 weitere gelöschte) für eine einfache, Einzeiler-Referenzfrage, bei der fast alle den gleichen Kernfunktion im verwenden (wie sie es sollten, weil es der einzige vernünftige und gesunde Ansatz für das Problem ist und alles darum herum nur Fehlerüberprüfung oder kreatives Neuinterpretieren der Spezifikation ist, was immer noch nur einen anderen vernünftigen, gesunden Ansatz zum erweiterten Problem hinterlässt).
0 Stimmen
Es gibt keine realistische Chance, dass in zukünftigen Versionen von Python ein besserer Ansatz möglich wird, da der vorhandene Ansatz bereits das Aufrufen einer einzigen integrierten Methode in der Liste ist - so einfach wie es nur geht.