在Python中使用lambda

在Python中使用lambda,python,sorting,Python,Sorting,我试图使用lambda对列表进行排序。我想做的是根据坐标与初始位置的曼哈顿距离对坐标进行排序。我知道我已经记下了大部分语法,但似乎我遗漏了一些小东西,谢谢 while (len(queue) > 0): queue.sort(queue, lambda x: util.manhattanDistance(curr,x)) 似乎您正试图告诉sort()方法使用lambda函数作为排序的键。这是通过关键字参数键完成的: queue.sort(queue,key=[您的lamb

我试图使用lambda对列表进行排序。我想做的是根据坐标与初始位置的曼哈顿距离对坐标进行排序。我知道我已经记下了大部分语法,但似乎我遗漏了一些小东西,谢谢

while (len(queue) > 0):  
    queue.sort(queue, lambda x: util.manhattanDistance(curr,x))  

似乎您正试图告诉
sort()
方法使用lambda函数作为排序的键。这是通过关键字参数
完成的:

queue.sort(queue,key=[您的lambda函数])

重写的行是:

queue.sort(queue,key=lambda x:util.manhattanDistance(curr,x))


编辑:误解了原始lambda函数的用途;虽然它是一个比较函数,但没有意义,因为距离函数不能是负的。但可能值得解释的是,正如最初编写的(在2.x中),OP使用
lambda
作为
cmp
函数,这正是它不起作用的原因。(在Python3中,代码实际上可以像编写的那样工作。)啊,谢谢。我不知道关键字参数的顺序,也不想查找。我认为这里的关键是,显式指定关键字参数要安全得多。我完全同意。除了更安全,让代码同时使用2.x和3.x(IIRC,
2to3
不会解决这个问题),它还更易于阅读。没人记得订单是什么。使用不带关键字的
cmp
函数的唯一原因是您需要与Python 2.3或更早版本兼容。lambda函数中的x是否表示列表中的每个元素?是;
x
表示每个元素,函数本身返回与该元素关联的值,以便对列表进行排序。作为旁注,Python中的控制语句不需要(也不应该有)括号:
,而len(queue)>0:
。但是,由于0为false,而任何其他整数都不是,因此这与len(队列):相同。而且,由于空序列为false,而任何其他序列均为false,因此这与队列:时的
相同。这就是您应该如何编写它的方法。它更惯用,更易于阅读,更短,甚至可能更高效。我刚才注意到的另一个问题是:您将
队列
作为
队列.排序
的第一个参数传递。无论队列的类型是什么,这都是不对的。(哦,不要调用变量
queue
;这是标准库模块的名称。)此外:
sort
不会更改对象的长度,因此它将永远循环,反复对已排序的列表重新排序。