def get_bounds(points):
    """
    Given a list of n-dimensional points, returns a list of length n where each
    element is a tuple holding (min, max) for that dimension.

    points -- list of n-dimensional points
    """

    bounds = [[None, None] for dimension_num in range(len(points[0]))]

    for point in points:

        for feature, bound in zip(point, bounds):

            lower, upper = bound

            if lower is None or feature < lower:

                bound[0] = feature

            if upper is None or feature > upper:

                bound[1] = feature

    return bounds