python - 如何加速python循环

标签 python performance nested-loops

我查看了几个网站上的一些讨论,但没有一个给我解决方案。 这段代码运行时间超过 5 秒:

for i in xrange(100000000):
  pass

我正在处理一个整数优化问题,我必须使用 O(n log n) 算法 编辑:O(n²/4) 算法,其中 n 代表所有矩阵的项目,即在以下代码中,n * m = 10000。因此,对于具有 10000 个元素的 100 * 100 矩阵,它将导致近 25000000 次迭代......。 它的代码可以总结如下:

m = 100
n = 100
for i in xrange(m):
  for j in xrange(n):
    for i2 in xrange(i + 1, m):
      for j2 in xrange(j + 1, n):
        if myarray[i][j] == myarray[i2][j2] and myarray[i2][j] == myarray[i][j2]:
          return [i, j], [i2, j2]

我应该放弃 Python 并回到 Java 还是 C?

我使用 Python 2.7,但 Psyco 不可用。 PyPy 不支持开箱即用的 Tkinter,而我正在使用 Tkinter。

那么,他们会提高循环速度吗?还有其他解决方案吗?

最佳答案

不是最漂亮的编码风格,但绝望的时代需要绝望的编码。尝试将嵌套的嵌套循环变成一个大的生成器表达式:

try:
    i,j,i2,j2 = ((i,j,i2,j2)
        for i in xrange(m)
          for j in xrange(n)
            for i2 in xrange(i + 1, m)
              for j2 in xrange(j + 1, n)
                if myarray[i][j] == myarray[i2][j2] and 
                    myarray[i2][j] == myarray[i][j2]).next()
    return [i,j],[i2,j2]
except StopIteration:
    return None

更新为使用内置的 nextproduct,以及 Py3 range 而不是 xrange:

from itertools import product
match = next(((i,j,i2,j2)
    for i, j in product(range(m), range(n))
        for i2, j2 in product(range(i+1, m), range(j+1, n))
            if myarray[i][j] == myarray[i2][j2] and 
                myarray[i2][j] == myarray[i][j2]), None)
if match is not None:
    i,j,i2,j2 = match
    return [i,j],[i2,j2]
else:
    return None

关于python - 如何加速python循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770791/

相关文章:

python - 比较两个 Pandas 数据框

python - 用形状为 (x, y) 的二维 bool 掩码掩蔽形状为 (x, y, z) 的 3 维张量

c# - 在 XML 文件中查找节点 - C# 中的性能改进

javascript - Backbone : Does scoping improve performance?

python - 使用日期时间索引引用 Pandas 数据框

multithreading - 测量多线程应用程序的带宽

performance - 在 MATLAB 中最大化简单算法的效率

java - 反转嵌套循环中显示数字的顺序

java - 为什么嵌套循环不单独添加值,而是将所有值加在一起?

python - 在 Ubuntu 中删除 1 个版本的 Python