Если вы на самом деле используете только отдельные буквы, как показано в вашем примере, то str.rindex
будет работать хорошо. Возникает ValueError
, если такого элемента нет, тот же класс ошибок, что и list.index
. Демонстрация:
>>> li = ["a", "b", "a", "c", "x", "d", "a", "6"]
>>> ''.join(li).rindex('a')
6
В более общем случае вы можете использовать list.index
в обратном списке:
>>> len(li) - 1 - li[::-1].index('a')
6
Разрезание здесь создает копию всего списка. Это хорошо для коротких списков, но для случая, когда li
очень большой, эффективность может быть лучше при ленивом подходе:
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))
Версия с одним вкладышем:
next(i for i in reversed(range(len(li))) if li[i] == 'a')