在for循环中创建一个类的命名实例 - 与networkx相关 - Python

时间:2014-03-15 12:10:48

标签: python networkx

我面临的问题是:

假设我们有一些课程(不重要的是它):

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()列表以某种方式混淆了节点的顺序。因此它不符合将节点添加到图表的顺序。 因此,我不再了解如何准确区分节点。

修改

鉴于图表的拉普拉斯,我设置了所有内容然后绘制图形。

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()

然而,这不会导致正确的标签。

1 个答案:

答案 0 :(得分:1)

您不需要名称,只需要引用。一个简单的解决方案是将引用放在字典中:

node = {}
for i in range(number_of_instances):
    node[i] = Node()
...
for i in range(number_of_nodes):
    my_graph.add_node(node[i], name="node %s" % i)