【发布时间】:2015-10-19 00:01:05
【问题描述】:
我的问题很简单。我有一个像这样的python简单代码:
for i in range(1,1193616,1) :
print i
因此将打印 1 到 1193616 范围内的所有数字,并且此循环过程花费了很长时间.. 如何让它快速?
编辑:
实际上,我尝试为图像数据(光栅)制作一个 A-star 寻路程序。 到目前为止,这是我的 A-star 函数脚本:
def A_star(h,c,dx,dy,u,s_id,e_id,Op,Cl,Prt,CC,o,ht,w):
Op.append(s_id)
while e_id not in Op :
if Op == [ ] :
break
candidate = { }
for i in Op :
d = {i : CC[i]}
candidate.update(d)
o = min(candidate, key=candidate.get)
Cl.append(o)
Op.remove(o)
adjacent_list = adjacent_cell(o,dx,dy )
for p in adjacent_list :
if p in Cl:
adjacent_list = filter(lambda i: i != p, adjacent_list)
elif p not in Op :
Op.append(p)
d = {p : o }
Prt.update(d)
d = {p : F(p,o,h,u,w,c,dx,e_id,ht,CC)}
CC.update(d)
elif id in Op :
f1 = F(p,o,h,u,w,c,dx,e_id,ht,CC)
f2 = F(p,Prt[p],h,u,w,c,dx,e_id,ht,CC)
if f1 < f2 :
d = {p : o }
Prt.update(d)
d = {id : F(p,o,h,u,w,c,dx,e_id,ht,CC)}
CC.update(d)
return Prt
假设 s_id = 1 (start) and e_id = 1193616 (end), 长时间循环进度发生在第 3 行
while e_id not in Op :
有什么方法可以加速或优化我的代码?
【问题讨论】:
-
我很确定印刷是你的瓶颈。尝试仅将
pass作为循环体并在循环完成后打印。应该快很多。 -
这不是循环,而是将无缓冲文本写入控制台。
-
打印你想做的事吗?为什么是 1193616?打印速度很慢。如果您想做除打印以外的其他事情,我们需要有关它的更多详细信息,以了解您是否可以实际优化它。
-
如前所述,循环很好,但对于 Python 2,您可能更喜欢
xrange以获得性能。
标签: python loops optimization