Python中的非顺序循环优化

时间:2011-10-03 16:36:53

标签: python optimization loops nonsequential

我有两个字典对象,连接和网络。这可以显示为图形,其中每个节点是计算机,连接描绘计算机和节点之间的边缘。网络是独特网络的字典对象,其中计算机可以作为其中一部分,对于前

1,2  
2,3  
4,5  
5,1 

是节点1到1的四个连接信息 因此,连接将是{1-> 1,2-> 1,3-> 1,4-> 2,5-> 1} 和网络{1->> 0,2-> 1}
这意味着 计算机1,2,3,5是n / w 1的一部分 计算机4是n / w 2的一部分 再次n / w 2与n / w 1互连 我必须阅读一个包含数千个此类连接信息的文件 这样做时,对于每个连接信息读取,我必须执行如下的非顺序循环

while network.has_key(connections[node1]):
    connections[node1]=network[connections[node1]] 

有没有更好的方法来优化上述循环?如果需要,我可以为此目的共享我的整个代码

2 个答案:

答案 0 :(得分:2)

我真的不明白你的问题,但我觉得图表相关问题的股票回答适用于此:

使用NetworkX而不是尝试提供自己的数据表示和算法。它可能更难学,但从长远来看,它可以节省您的时间和头痛。

答案 1 :(得分:1)

while network.has_key(connections[node1]):
    connections[node1]=network[connections[node1]] 

该代码为network[connections[node1]]执行两次has_key查询,为[]执行一次查找。

它还重复访问connections[node1]

相反,你可以这样做:

current = connections[node1]
while True:
    try:
         current = network[current]
    except KeyError:
         break
connections[node1] = current

但是,改进其余代码可能会有更好的改进。但为此你可能会发现http://codereview.stackexchange.com是一个更好的网站。