如何解决一个列表未正确保存在另一个列表中,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_matrix
或 to_numpy_array
。
由于您似乎在寻找对称邻接矩阵,因此以下应该有效:
adjacency = nx.to_numpy_array(G.to_undirected())
如果您仍然想继续使用您自己的代码,您目前总是使用以下几行将 lista
重置为所有 "0"
for i in range(len(lista)):
lista[i]="0"
这可以通过始终附加副本以快速而肮脏的方式解决:
listaFinal.append(lista[:])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。