Wenn Sie tatsächlich nur einzelne Buchstaben verwenden, wie in Ihrem Beispiel gezeigt, str.rindexwürde dies problemlos funktionieren. Dies löst eine ValueErrorFehlerklasse 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.indexauf 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 lies 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