def _neighbour_list(graph, separator, secondary, attributes):
    """
    Generate a string containing the neighbour list of the graph as well as a
    dict containing the notifiers as key and the associated values.
    @todo: speed this up!
    """
    lst_neighbours = list(graph.adjacency_matrix().tolil().rows)
    for v1 in range(graph.node_nb()):
        for i, v2 in enumerate(lst_neighbours[v1]):
            str_edge = str(v2)
            eattr = graph.get_edge_attributes((v1, v2))
            for attr in attributes:
                str_edge += '{}{}'.format(secondary, eattr[attr])
            lst_neighbours[v1][i] = str_edge
        lst_neighbours[v1] = '{}{}{}'.format(v1, separator, separator.join(
            lst_neighbours[v1]))
    str_neighbours = '\n'.join(lst_neighbours)
    return str_neighbours
