Find the last matching element in a list and return it.

    Usage::

        findlast(element, list_)
        findlast(of=element, in_=list_)
        findlast(where=predicate, in_=list_)

    :param element, of: Element to search for (by equality comparison)
    :param where: Predicate defining an element to search for.
                  This should be a callable taking a single argument
                  and returning a boolean result.
    :param list_, in_: List to search in

    :return: Last matching element
    :raise IndexError: If no matching elements were found

    .. versionadded:: 0.0.4

def findlast(*args, **kwargs):
    """Find the last matching element in a list and return it.

    Usage::

        findlast(element, list_)
        findlast(of=element, in_=list_)
        findlast(where=predicate, in_=list_)

    :param element, of: Element to search for (by equality comparison)
    :param where: Predicate defining an element to search for.
                  This should be a callable taking a single argument
                  and returning a boolean result.
    :param list_, in_: List to search in

    :return: Last matching element
    :raise IndexError: If no matching elements were found

    .. versionadded:: 0.0.4
    """
    list_, idx = _index(*args, start=sys.maxsize, step=-1, **kwargs)
    if idx < 0:
        raise IndexError("element not found")
    return list_[idx]