def chunk_list(l, n):
    """ Chops a list into tuples (chunks) of maximal size `n`
    
    Args:
        l (List[Any]): the list to be resized
        n (int): maximal size of the chunks
    
    Example:
        >>> chunk_list([1, 2, 3, 4, 5], 2)
        [(1, 2), (3, 4), (5,)]
    """
    assert n > 0
    
    nl = len(l)
    if n > nl:
        return [tuple(l)]
    
    l_ = list(zip(*[l[i::n] for i in range(n)]))
    
    if nl % n > 0:
        l_.append(tuple(l[-(nl % n):]))
    return l_