如何修正Python代码实现向节点邻接列表添加关联矩阵行
修正后的代码实现
你的原代码主要存在两个核心问题:
- 索引对应错误:
n_list的下标是从0开始的,但节点编号是从1开始的,应该用k-1作为n_list的索引,而非矩阵行号i - 重复添加行:原代码遍历每行的每个元素,只要匹配到k就添加一次该行,会导致同一行被多次重复添加
下面是修正后的代码:
import numpy as np E = np.array([[1, 2, 4], [2, 5, 4], [2, 3, 5], [3, 6, 5], [4, 5, 7], [5, 8, 7], [5, 6, 8], [6, 9, 8]]) Nn = np.max(E) print("maximum node number: \n", Nn) n_row, n_column = E.shape print("\n", n_row, n_column) n_list = [[] for x in range(Nn)] print("\n initialize n vector\n", n_list) for k in range(1, Nn+1): print(k) # 遍历矩阵每一行,检查该行是否包含当前节点k for row in E: if k in row: # 转换为普通列表优化可读性,需保留numpy数组可去掉.tolist() n_list[k-1].append(row.tolist()) print("\n n vector\n", n_list)
关键修正说明:
- 用
for k in range(1, Nn+1)替代while循环,逻辑更简洁直观 - 直接遍历矩阵的每一行,通过
k in row判断是否包含目标节点,避免重复添加同一行 - 用
n_list[k-1]对应节点k的存储位置(节点1对应下标0,以此类推) - 可选转换为普通列表:
row.tolist()让输出结果更易读,若需保留numpy数组格式可直接移除该方法
运行后结果完全符合需求:
- 节点1对应
n_list[0],仅包含第一行[1,2,4] - 节点2对应
n_list[1],包含矩阵的第1、2、3行 - 其余节点均按规则匹配到所有包含自身的矩阵行
内容的提问来源于stack exchange,提问作者ASsqsqs
相关产品推荐
相关产品推荐

