2009-02-06 3 views
35

Gibt es ein integrierten Methode, den Teil der Listen sind, die mir den ersten und letzten Index von einigem Wert geben würde, wie:Finding ersten und letzten Index von einem Wert in einer Liste in Python

verts.IndexOf(12.345) 
verts.LastIndexOf(12.345) 
+1

Vielleicht sollten Sie in den Python-Dokumenten nachlesen: http://docs.python.org/library/stdtypes.html#mutable-sequence-types. Ich denke, das wird viel schneller sein, als viele Fragen zu stellen. –

+2

Ich lese sie auch, aber nichts über Python zu wissen macht die Sache schwieriger. Ich finde seine Syntax sehr kryptisch. –

+0

Wenn Ihre Listen sortiert sind, sollten Sie sich das Bisect-Modul ansehen. –

Antwort

59

Sequenzen haben eine Methode index(value), die den Index des ersten Vorkommens zurückgibt - in Ihrem Fall wäre dies verts.index(value).

Sie können es auf verts[::-1] ausführen, um den letzten Index herauszufinden. Hier wäre dies len(verts) - 1 - verts[::-1].index(value)

+0

Danke, wie machst du Liste [:: - 1]? verts [:: - 1]? –

+0

yep, ich habe die Antwort bearbeitet – SilentGhost

+2

Btw verts [:: - 1] kehrt nur die Liste um, richtig? Also muss ich den Index kompensieren, oder? –

14

Verwenden i1 = yourlist.index(yourvalue) und i2 = yourlist.rindex(yourvalue).

+13

Python _strings_ haben 'rindex ', aber Listen nicht. –

+0

Entschuldigung, Sie haben Recht. Ich habe vergessen, dass Listen keinen Rindex haben. Sie müssen die Liste umkehren. –

+9

Wahr, aber "rindex" ist, was viele Leser suchen ... –

11

wenn Sie für den Index des letzten Auftretens von myvalue in mylist suchen:

len(mylist) - mylist[::-1].index(myvalue) - 1 
7

Als kleine Hilfsfunktion:

def rindex(mylist, myvalue): 
    return len(mylist) - mylist[::-1].index(myvalue) - 1 
2

Diese Methode kann mehr als oben

optimiert werden
def rindex(iterable, value): 
    try: 
     return len(iterable) - next(i for i, val in enumerate(reversed(iterable)) if val == value) - 1 
    except StopIteration: 
     raise ValueError 
+1

"Optimiert" im Sinne von mehr Platz-Effizienz, aber es ist etwa 50% langsamer. – dubiousjim

Verwandte Themen