expectts two list of numbers representing two points in the same ndimensional space https en wikipedia orgwikitaxicabgeometry manhattandistance1 1 2 2 2 0 manhattandistance1 5 1 5 2 2 1 0 manhattandistance1 5 1 5 2 5 2 1 5 manhattandistance3 3 3 0 0 0 9 0 manhattandistance1 1 none traceback most recent call last valueerror missing an input manhattandistance1 1 2 2 2 traceback most recent call last valueerror both points must be in the same ndimensional space manhattandistance1 one 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found str manhattandistance1 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found int manhattandistance1 1 notalist traceback most recent call last typeerror expected a list of numbers as input found str validatepointnone traceback most recent call last valueerror missing an input validatepoint1 one traceback most recent call last typeerror expected a list of numbers as input found str validatepoint1 traceback most recent call last typeerror expected a list of numbers as input found int validatepointnotalist traceback most recent call last typeerror expected a list of numbers as input found str version with one liner manhattandistanceoneliner1 1 2 2 2 0 manhattandistanceoneliner1 5 1 5 2 2 1 0 manhattandistanceoneliner1 5 1 5 2 5 2 1 5 manhattandistanceoneliner3 3 3 0 0 0 9 0 manhattandistanceoneliner1 1 none traceback most recent call last valueerror missing an input manhattandistanceoneliner1 1 2 2 2 traceback most recent call last valueerror both points must be in the same ndimensional space manhattandistanceoneliner1 one 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found str manhattandistanceoneliner1 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found int manhattandistanceoneliner1 1 notalist traceback most recent call last typeerror expected a list of numbers as input found str expectts two list of numbers representing two points in the same n dimensional space https en wikipedia org wiki taxicab_geometry manhattan_distance 1 1 2 2 2 0 manhattan_distance 1 5 1 5 2 2 1 0 manhattan_distance 1 5 1 5 2 5 2 1 5 manhattan_distance 3 3 3 0 0 0 9 0 manhattan_distance 1 1 none traceback most recent call last valueerror missing an input manhattan_distance 1 1 2 2 2 traceback most recent call last valueerror both points must be in the same n dimensional space manhattan_distance 1 one 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found str manhattan_distance 1 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found int manhattan_distance 1 1 not_a_list traceback most recent call last typeerror expected a list of numbers as input found str _validate_point none traceback most recent call last valueerror missing an input _validate_point 1 one traceback most recent call last typeerror expected a list of numbers as input found str _validate_point 1 traceback most recent call last typeerror expected a list of numbers as input found int _validate_point not_a_list traceback most recent call last typeerror expected a list of numbers as input found str version with one liner manhattan_distance_one_liner 1 1 2 2 2 0 manhattan_distance_one_liner 1 5 1 5 2 2 1 0 manhattan_distance_one_liner 1 5 1 5 2 5 2 1 5 manhattan_distance_one_liner 3 3 3 0 0 0 9 0 manhattan_distance_one_liner 1 1 none traceback most recent call last valueerror missing an input manhattan_distance_one_liner 1 1 2 2 2 traceback most recent call last valueerror both points must be in the same n dimensional space manhattan_distance_one_liner 1 one 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found str manhattan_distance_one_liner 1 2 2 2 traceback most recent call last typeerror expected a list of numbers as input found int manhattan_distance_one_liner 1 1 not_a_list traceback most recent call last typeerror expected a list of numbers as input found str
def manhattan_distance(point_a: list, point_b: list) -> float:
    

    _validate_point(point_a)
    _validate_point(point_b)
    if len(point_a) != len(point_b):
        raise ValueError("Both points must be in the same n-dimensional space")

    return float(sum(abs(a - b) for a, b in zip(point_a, point_b)))


def _validate_point(point: list[float]) -> None:
    
    if point:
        if isinstance(point, list):
            for item in point:
                if not isinstance(item, (int, float)):
                    msg = (
                        "Expected a list of numbers as input, found "
                        f"{type(item).__name__}"
                    )
                    raise TypeError(msg)
        else:
            msg = f"Expected a list of numbers as input, found {type(point).__name__}"
            raise TypeError(msg)
    else:
        raise ValueError("Missing an input")


def manhattan_distance_one_liner(point_a: list, point_b: list) -> float:
    

    _validate_point(point_a)
    _validate_point(point_b)
    if len(point_a) != len(point_b):
        raise ValueError("Both points must be in the same n-dimensional space")

    return float(sum(abs(x - y) for x, y in zip(point_a, point_b)))


if __name__ == "__main__":
    import doctest

    doctest.testmod()