【发布时间】:2014-03-15 12:10:48
【问题描述】:
我面临的问题如下:
假设我们有一些类(它的作用并不重要):
class Node: ...
...
我现在需要的是创建这个类的几个实例;都有名字。 我尝试了几件事,这里试一试,这显然是行不通的。只是为了明确我想要实现的目标:
for i in range(number_of_instances):
"name"+str(i+1) = Node()
我需要所有这些对象的名称,以便稍后将它们放在列表中。实际上它是包含图表中所有节点的列表。该图将使用 networkx 模块制作。我需要能够以某种方式区分列表中的节点。这就是为什么我需要这个名字。
my_graph = networkx.Graph()
for i in range(number_of_nodes):
my_graph.add_node(Node(), name = str(i+1))
执行此操作后,my_graph.nodes() list 不知何故混淆了节点的顺序。所以它与节点添加到图中的顺序不对应。
所以我不知道如何准确区分节点了。
编辑
鉴于图表的拉普拉斯算子,我设置了所有内容,然后绘制图表。
name_dict = nx.get_node_attributes(my_graph, "name")
pos = nx.spring_layout(my_graph)
nx.draw(my_graph, pos, with_labels=False)
nx.draw_networkx_labels(my_graph, pos, name_dict)
plt.show()
但是这不会导致正确的标签。
【问题讨论】:
-
你好。虽然很多人不赞成使用
globals()做你想做的事(我不知道为什么),但我想你会在我的回复中找到问题的答案:(stackoverflow.com/a/5036827/551449) -
Graph.node(nodes()返回的内容)是一个字典......它是隐式无序的。您可以通过节点属性(即名称)获取节点。你到底想做什么? -
在此之后我想绘制图表。请参阅 edit 但标签不再正确..-.-
-
@eyquem:为什么通常会让你的代码更复杂更难理解,而使用全局变量会让你的代码更难管理。