【问题标题】:Nested for Loop optimization in pythonpython中的嵌套for循环优化
【发布时间】:2016-10-16 17:45:55
【问题描述】:

我想将 2 个 for 循环优化为单个 for 循环,有什么办法,因为数组的长度非常大。

A = [1,4,2 6,9,10,80] #length of list is very large
B  = []
for x in A:
    for y in A:
        if x != y:
            B.append(abs(x-y))
print(B)

【问题讨论】:

  • 你到底想完成什么?
  • 这真的是您希望代码运行的方式吗?那个sn-p的输出没问题?
  • A 中的第二个和第三个逗号之间是什么:数字26 或数字26?就像现在一样,您的代码将因语法错误而停止。

标签: python loops optimization


【解决方案1】:

没有更好,但更pythonic:

B = [abs(x-y) for x in A for y in A if x!=y]

除非您绝对需要重复 (abs(a-b) == abs(b-a)),否则您可以将列表减半(从而计算):

B = [abs(A[i]-A[j]) for i in range(len(A)) for j in range(i+1, len(A))]

最后,您可以使用numpy 的力量来获得 C++ 加速:

import numpy as np

A = np.array(A)
A.shape = -1,1 # make it a column vector

diff = np.abs(A - A.T) # diff is the matrix of abs differences

# grab upper triangle of order 1 (i.e. less the diagonal)
B = diff[np.triu_indices(len(A), k=1)]

但是无论如何这总是 O(n^2)...

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 2012-01-27
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多