Search code examples
pythonlist

How to find the last occurrence of an item in a Python list


Say I have this list:

li = ["a", "b", "a", "c", "x", "d", "a", "6"]

As far as help showed me, there is not a builtin function that returns the last occurrence of a string (like the reverse of index). So basically, how can I find the last occurrence of "a" in the given list?


Solution

  • If you are actually using just single letters like shown in your example, then str.rindex would work handily. This raises a ValueError if there is no such item, the same error class as list.index would raise. Demo:

    >>> li = ["a", "b", "a", "c", "x", "d", "a", "6"]
    >>> ''.join(li).rindex('a')
    6
    

    For the more general case you could use list.index on the reversed list:

    >>> len(li) - 1 - li[::-1].index('a')
    6
    

    The slicing here creates a copy of the entire list. That's fine for short lists, but for the case where li is very large, efficiency can be better with a lazy approach:

    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))
    

    One-liner version:

    next(i for i in reversed(range(len(li))) if li[i] == 'a')