Python lambda函数中可能存在的瓶颈作为排序中的键

Python lambda函数中可能存在的瓶颈作为排序中的键,python,lambda,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]

下面的代码列举了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
def enum_itsc(k,b):
n=len(k)
itsc_列表=dict()
对于x范围内的i(n):
对于x范围内的j(i+1,n):
x=(b[j]-b[i])/(k[i]-k[j])
y=x*k[i]+b[i]

如果x在可能的情况下,将内置函数用作
排序的
。在这种情况下,
key=lambda i:k[i]
相当于
key=k.\uu getitem\uuuu

我用虚构的值做了一个小测试,发现改变这个值会带来大约1.5-2倍的加速。(仅在排序操作上)。当然,这可能因您的数据而异


标准库函数的另一个很好的来源是
操作符
模块(例如
operator.itemgetter
operator.attrgetter
。)

列表。排序
将对数字进行排序,而不需要lambday。您不需要传递任何
函数来对列表进行数字排序,这是默认行为。请包含一个完整的程序,其他人可以运行该程序来说明您的问题。您的英语描述总是比代码更模糊。例如,您的描述省略了
k
的定义。事实上,您完全正确。我只是使用您的建议来评估性能,排序操作的加速比大约为2倍。非常感谢你的帮助!