用Python中的list方法加速for循环

2024-04-19 20:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有for循环,它迭代了将近250万次,要得到一个结果需要很长时间。在JS中,我可以在1秒钟内完成这个任务,但是Python在我的计算机上只需要6秒钟。在这种情况下,我必须使用Python。代码如下:

            for i in xrange(k,p,2):
                arx = process[i]
                ary = process[i+1]
                for j in xrange(7,-1,-1):
                    nx = arx + dirf[j]
                    ny = ary + dirg[j]
                    ind = ny*w+nx
                    if data[ind] == e[j]:       
                        process[c]=nx
                        c=c+1
                        process[c]=ny
                        c=c+1
                        matrix[ind]=1

以下是代码中的一些列表: process = [None] * (11000*4)赋值后,它的项将被整数替换。在

^{pr2}$

数据列表由rgba图像像素的“r”信息组成。 data = imgobj.getdata(0)

我该怎么做。我做错什么了?关于for循环还有其他方法吗?谢谢。在


Tags: 代码in列表fordata计算机jsprocess
1条回答
网友
1楼 · 发布于 2024-04-19 20:14:14

以下是一些改进代码的建议:

内部的xrange经常被使用:如果你把它列为一个常规的列表,然后做这样的事情:

inner = range(7,-1,-1) # make the actual list
for(a,b,c): #first for
    #stuff
    for i in inner # reference an actual list and not the generator

证据:

^{pr2}$

如果我写的内部代码的速度和我写的不一样的话。 [编辑]引用局部变量比访问全局变量快。 因此,如果这是正确的,请将列表定义放在尽可能靠近循环的地方,而不是每次都生成它。在

你也改变了两次程序。如果不需要,就选一个。在

正如你在评论中提到的,你说你在处理图像。我不确定下面的内容是否相关,但也许您可以使用openCV,它有一个pythonapi到C代码。这可能会加快速度。正如其他人所提到的:numpy和你自己的cython扩展将大大加快这一进程。在

相关问题 更多 >