Python中的非顺序循环优化

Python中的非顺序循环优化,python,optimization,loops,nonsequential,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互连 我必须阅读包含数千个此类连接信息的

我有两个字典对象,连接和网络。这可以可视化为一个图形,其中每个节点都是一台计算机,连接描述了计算机和节点之间的一条边。网络是唯一网络的字典对象,计算机可以是其中的一部分,例如

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]] 
有没有更好的方法来优化上述循环?如果需要,我可以为此共享我的全部代码

while network.has_key(connections[node1]):
    connections[node1]=network[connections[node1]] 
该代码对
网络[connections[node1]]
进行两次查找,一次用于
has _key
,一次用于
[]

它还重复访问
连接[node1]

相反,您可以:

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

但是,通过修改代码的其余部分,可能会有更好的改进。但是,你可能会发现这是一个更好的网站。

很抱歉,我不太理解你的问题,但我觉得与图表相关的问题的基本答案适用于这里:


使用而不是试图提出自己的数据表示和算法。这可能更难学,但从长远来看,它会节省你的时间和头痛。

你说的“非顺序循环”是什么意思?假设您正在按顺序读取单个文件,我假设这是您的瓶颈。您是否考虑过评测代码?CProfile很好-在那之后,你将清楚地知道你的目标是什么bottleneck@oxtopus,请检查代码段。非顺序意味着我既不能使用列表理解,也不能使用任何列表函数,如reduce…@savinos,是的,我尝试过,这就是我识别上述代码片段的方式。我对此一无所知。我试图从一个完全不同的角度来研究这个问题。从cProfiler我发现这行代码是我整个系统的瓶颈。在这里减少50%的时间最终可能会减少20%的处理时间。@user977038,也许,但通常情况下,您可以通过避免出现在这里来解决这类问题,而不是加快速度。@user977038,通过避免出现在这里,我指的是执行过程中的一段代码。不要让这个代码更快。实际上,我用NetworkX创建了我最初的程序原型。工作得非常好。我现在正试图在没有它的情况下编写相同的代码。明显的性能原因,正是因为这个原因,我在这里优化我觉得有瓶颈的每一点。