def rescale_list_to_range(original, limits):
    """
    Linearly rescale values in original list to limits (minimum and maximum).

    :example:

    >>> rescale_list_to_range([1, 2, 3], (0, 10))
    [0.0, 5.0, 10.0]
    >>> rescale_list_to_range([1, 2, 3], (-10, 0))
    [-10.0, -5.0, 0.0]
    >>> rescale_list_to_range([1, 2, 3], (0j, 10j))
    [0j, 5j, 10j]

    :param original: Original list or list-like to be rescaled.
    :type original: list
    :param limits: Tuple of two floats, min and max, to constrain the new list
    :type limits: tuple
    :return: Original list rescaled to fit between min and max
    :rtype: list
    """
    new_min, new_max = limits[0:2]
    old_min, old_max = min(original), max(original)
    return (new_max + new_min) / 2 * original / old_min if old_min == old_max \
        else [new_max * (v - old_min) / (old_max - old_min) +
              new_min * (old_max - v) / (old_max - old_min) for v in original]