Wenn Sie tatsächlich nur einzelne Buchstaben verwenden, wie in Ihrem Beispiel gezeigt, str.rindex
würde dies problemlos funktionieren. Dies löst eine ValueError
Fehlerklasse aus, die vorhanden ist, wenn es kein solches Element gibt list.index
. Demo:
>>> li = ["a", "b", "a", "c", "x", "d", "a", "6"]
>>> ''.join(li).rindex('a')
6
Für den allgemeineren Fall könnten Sie list.index
auf der umgekehrten Liste verwenden:
>>> len(li) - 1 - li[::-1].index('a')
6
Durch das Schneiden hier wird eine Kopie der gesamten Liste erstellt. Das ist in Ordnung für kurze Listen, aber für den Fall, dass li
es sehr groß ist, kann die Effizienz mit einem faulen Ansatz besser sein:
def list_rindex(li, x):
for i in reversed(range(len(li))):
if li[i] == x:
return i
raise ValueError("{} is not in list".format(x))
Einzeiler-Version:
next(i for i in reversed(range(len(li))) if li[i] == 'a')
len(li) - next(i for i, v in enumerate(reversed(li), 1) if v == 'a')
ist ein wenig schneller für mich