lambda函数中可能存在的瓶颈是排序中的关键

时间:2014-08-13 18:29:06

标签: python lambda

我有下面的代码,它列举了n行的交集,其中感兴趣的交叉点仅在x > 0,并且对于每个交叉点,我将保持在交叉点右边的顺序,行按顺序排列他们的坡度。

def enum_itsc(k, b):
    n = len(k)
    itsc_list = dict()
    for i in xrange(n):
        for j in xrange(i + 1, n):
            x = (b[j] - b[i]) / (k[i] - k[j])
            y = x * k[i] + b[i]
            if x <= 0:
                continue

            if (x, y) in itsc_list:
                itsc_list[(x, y)].update([i, j])
            else:
                itsc_list[(x,y)] = set([i, j])

    for itsc in itsc_list:
        itsc_list[itsc] = list(itsc_list[itsc])
        itsc_list[itsc].sort(key=lambda i: k[i])

    return itsc_list

经过一些简介后,似乎lambda函数的成本很高。我该如何改进代码?或者这就是它,并且没有办法改进。

1 个答案:

答案 0 :(得分:0)

尽可能使用内置函数作为key的{​​{1}}。在这种情况下,sort相当于key=lambda i: k[i]

我做了一个带有虚拟值的小测试,看到改变它的速度大约是1.5-2倍。 (仅对排序操作)。当然,根据您的数据,这可能会有所不同。

key=k.__getitem__标准库函数的另一个好的来源是key模块(例如operatoroperator.itemgetter ...)