我的 Python 从边缘列表构造节点邻居的代码怎么会出错?
How is my Python code to construct node neighbors from edge list going so wrong?
我正在处理树并且我已经编写了一些简单的代码来将表示为节点号对的边列表转换为邻居数组,其中第 i 个元素应该是节点 i 的列表相邻节点。代码是:
def calculateNeighbors( n, edges ):
neighbors = [[]] * n
for edge in edges:
v1 = edge[ 0 ]
v2 = edge[ 1 ]
neighbors[ v1 ].append( v2 )
neighbors[ v2 ].append( v1 )
return neighbors
当我 运行 为 n
=4
和 edges
=[[1,0],[1,2],[1,3]]
时,我得到以下结果:
[[0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1]]
这看起来像是边缘列表的四个副本。谁能请 指出我错在哪里?我希望结果是这样的
[[1],[0,2,3],[1],[1]]
我明白了。我初始化“邻居”的方式,四个子列表是同一个对象。投注说
neighbors = [ [] for i in range( n ) ]
我正在处理树并且我已经编写了一些简单的代码来将表示为节点号对的边列表转换为邻居数组,其中第 i 个元素应该是节点 i 的列表相邻节点。代码是:
def calculateNeighbors( n, edges ):
neighbors = [[]] * n
for edge in edges:
v1 = edge[ 0 ]
v2 = edge[ 1 ]
neighbors[ v1 ].append( v2 )
neighbors[ v2 ].append( v1 )
return neighbors
当我 运行 为 n
=4
和 edges
=[[1,0],[1,2],[1,3]]
时,我得到以下结果:
[[0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1]]
这看起来像是边缘列表的四个副本。谁能请 指出我错在哪里?我希望结果是这样的
[[1],[0,2,3],[1],[1]]
我明白了。我初始化“邻居”的方式,四个子列表是同一个对象。投注说
neighbors = [ [] for i in range( n ) ]