【发布时间】:2016-04-04 17:47:38
【问题描述】:
我有一个MultiDiGraph,其中节点之间可能存在多个边,这些边基于一个键进行区分。在图表中,我有很多键,我想遍历它们,为每个键执行一个任务。
我可以解决这个问题的一种方法是遍历所有边,并将键存储在一个集合中。然后我将能够迭代该集合的元素:
import networkx as nx
G = nx.MultiDiGraph()
G.add_edge('a', 'b', 1)
G.add_edge('a', 'b', 2)
G.add_edge('b', 'c', 1)
G.add_edge('c', 'a', 3)
# Iterate over edges in the map and store the keys
keys = set(e[2] for e in G.edges_iter(keys=True))
# Now do something for each key
for key in keys:
pass # do something
但这似乎非常低效,因为我最终将遍历G 的边缘,然后再次返回keys。
我知道我可以通过构建我的集合来提高效率:
keys = set()
for e in G.edges_iter(keys=True):
key = e[2]
if key in keys:
continue
keys.add(key)
# do something
但我真的希望networkx 有一些特别的东西,我只是没有遇到过,或者一些成语来使这个整洁。有什么想法吗?
【问题讨论】: