r"""
    Args:
        list_ (list): list in sorted domain
        index_list (list): index list of the unsorted domain

    Note:
        Seems to be logically equivalent to
        ut.take(list_, ut.argsort(index_list)), but faster

    Returns:
        list: output_list_ - the input list in the unsorted domain

    CommandLine:
        python -m utool.util_list --test-list_inverse_take

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_list import *  # NOQA
        >>> import utool as ut
        >>> # build test data
        >>> rank_list = [3, 2, 4, 1, 9, 2]
        >>> prop_list = [0, 1, 2, 3, 4, 5]
        >>> index_list = ut.argsort(rank_list)
        >>> sorted_prop_list = ut.take(prop_list, index_list)
        >>> # execute function
        >>> list_ = sorted_prop_list
        >>> output_list_  = list_inverse_take(list_, index_list)
        >>> output_list2_ = ut.take(list_, ut.argsort(index_list))
        >>> assert output_list_ == prop_list
        >>> assert output_list2_ == prop_list
        >>> # verify results
        >>> result = str(output_list_)
        >>> print(result)

    Timeit::
        %timeit list_inverse_take(list_, index_list)
        %timeit ut.take(list_, ut.argsort(index_list))

def list_inverse_take(list_, index_list):
    r"""
    Args:
        list_ (list): list in sorted domain
        index_list (list): index list of the unsorted domain

    Note:
        Seems to be logically equivalent to
        ut.take(list_, ut.argsort(index_list)), but faster

    Returns:
        list: output_list_ - the input list in the unsorted domain

    CommandLine:
        python -m utool.util_list --test-list_inverse_take

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_list import *  # NOQA
        >>> import utool as ut
        >>> # build test data
        >>> rank_list = [3, 2, 4, 1, 9, 2]
        >>> prop_list = [0, 1, 2, 3, 4, 5]
        >>> index_list = ut.argsort(rank_list)
        >>> sorted_prop_list = ut.take(prop_list, index_list)
        >>> # execute function
        >>> list_ = sorted_prop_list
        >>> output_list_  = list_inverse_take(list_, index_list)
        >>> output_list2_ = ut.take(list_, ut.argsort(index_list))
        >>> assert output_list_ == prop_list
        >>> assert output_list2_ == prop_list
        >>> # verify results
        >>> result = str(output_list_)
        >>> print(result)

    Timeit::
        %timeit list_inverse_take(list_, index_list)
        %timeit ut.take(list_, ut.argsort(index_list))
    """
    output_list_ = [None] * len(index_list)
    for item, index in zip(list_, index_list):
        output_list_[index] = item
    return output_list_