Si vous n'utilisez que des lettres simples comme dans votre exemple, alors str.rindex
fonctionnerait sans problème. Cela soulève une ValueError
s'il n'y a pas d'élément de ce type, la même classe d'erreur que list.index
soulèverait. Démonstration :
>>> li = ["a", "b", "a", "c", "x", "d", "a", "6"]
>>> ''.join(li).rindex('a')
6
Pour le cas plus général, vous pouvez utiliser list.index
sur la liste inversée :
>>> len(li) - 1 - li[::-1].index('a')
6
Le découpage ici crée un copie de la liste entière. C'est très bien pour les listes courtes, mais dans le cas où li
est très grande, l'efficacité peut être meilleure avec une approche paresseuse :
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))
Une version en une ligne :
next(i for i in reversed(range(len(li))) if li[i] == 'a')