Якщо ви насправді використовуєте лише окремі літери, як показано у вашому прикладі, це str.rindex
буде працювати зручно. Це піднімає a, 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')
len(li) - next(i for i, v in enumerate(reversed(li), 1) if v == 'a')
для мене трохи швидше