def get_successor_list(adj_matrix, vertex_map, read_strand):
    """ Returns a list of successors by vertex, sensitive to the read strand

    Parameters
    ----------
    adj_matrix: 2D array with size [len(edges),len(edges)]. '1' represents the two edges
        are connected.
    vertex_map: 2D array with size [2, len(vertexs)]. Vertex positions
    read_strand: The gene strand. '+' or '-'.

    Returns
    -------
    succ_list: List[List[int]]. The connected vertex list for each vertex

    """
    succ_list = []
    assert adj_matrix.shape[0] == adj_matrix.shape[1]
    for idx in range(adj_matrix.shape[0]):
        succ_list.append([])
        for jdx in range(adj_matrix.shape[0]):
            if adj_matrix[idx, jdx] == 1 and (read_strand == '+' and 
                vertex_map[0][idx] <= vertex_map[0][jdx] or read_strand ==
                '-' and vertex_map[1][idx] >= vertex_map[1][jdx]):
                succ_list[idx].append(jdx)
    return succ_list
