一个列表未正确保存在另一个列表中,Python,networkx

问题描述

我正在尝试为可变大小的图形创建一个邻接矩阵。

这是我的代码

import networkx as nx
import graphviz
from networkx.algorithms.operators.product import _init_product_graph
from networkx.classes.function import edges,info
from networkx.drawing import nx_agraph
from networkx.generators.trees import prefix_tree
import os
from os import remove
G = nx.DiGraph()

lista=[]

Columnas=[]
Filas=[]

def correr():
  listaFinal=[]
  G.add_node("Daniel")
  G.add_node("Javier")
  G.add_node("Kimberly")
  G.add_node("Fernando")

  G.add_edge("Daniel","Javier")
  G.add_edge("Javier","Kimberly")
  G.add_edge("Kimberly","Fernando")


  for i in G.nodes:
    Columnas.append(i)
    Filas.append(i)

  
  for i in range(len(Columnas)):
    lista.append("0")
  print(lista)
  x=0
  for i in Filas:
    for edge in G.edges:
      for j in Columnas:
      
        
        if ((i==edge[0] and j == edge[1]) or (i==edge[1] and j == edge[0])):
          lista[x]="1"
        x+=1
      
      x=0
    
    
    print("Lista a guardar: " + str(lista))
    listaFinal.append(lista)
    print("Se vuelven 0 otra vez")
    
    
  
    for i in range(len(lista)):
      lista[i]="0"
  print(listaFinal)

 
  
if __name__=="__main__":
  correr()

但是当打印最终矩阵时,它是这样打印的:

['0','0','0']
['0','0']

它应该这样打印:

['0','1','0']
['1','1']
['0','0']

我注意到错误发生在我代码的这个区域:

print("Lista a guardar: " + str(lista))
listaFinal.append(lista)

由于将小列表添加到较大列表时,未正确输入。

只输入0

['0','0']

我已经审核过了,但不知道为什么会失败。

知道为什么会这样吗?

解决方法

要解决您的问题,您可以简单地使用内置函数,例如adjacency_matrixto_numpy_array

由于您似乎在寻找对称邻接矩阵,因此以下应该有效:

adjacency = nx.to_numpy_array(G.to_undirected())

如果您仍然想继续使用您自己的代码,您目前总是使用以下几行将 lista 重置为所有 "0"

for i in range(len(lista)):
      lista[i]="0"

这可以通过始终附加副本以快速而肮脏的方式解决:

listaFinal.append(lista[:])