a=['green egg','snail and lettuce','bacon','dorse naga','rutabaga ripple','cheese']
a.sort(cmp=lambda x,y:cmp(len(x),len(y)))
print a
很抱歉我的无知,我不明白这个lambda函数是怎么工作的,我只知道cmp给+1/1/0来显示比较的结果,len给出了字符串的长度
lambda函数是如何接受参数的?两人一组?第一,第二然后第三,第四?
这类人在这里干什么?
非常感谢你的帮助!在
Tags:
也许使用常规函数更容易理解
lambda函数并没有这里的正则函数好。更难记录和测试。在
Aside:
^{pr2}$cmp
在Python2中不推荐使用,因此您应该改用key函数。在正如@Roman的回答一样,这个
key_function
只是len
的包装,所以您可以写作为练习,您可以向
cmp_function
和key_function
添加一个print语句,看看每个语句被调用了多少次。将其与a
中的项数进行比较为什么不使用
key
?在如果要对
cmp
使用旧式排序,则必须定义函数cmplike this:所以在你的情况下可能是这样的:
^{pr2}$此函数用于比较基于比较的排序中的两个元素(Timsort,如果我没弄错的话)
罗曼·佩卡尔解释了你应该怎样做。在
但为什么你的版本有效呢?在
这里有两个不同的名称为
cmp
:首先,
cmp=
意味着您将传递一个名为cmp
的关键字参数。正如the docs解释的那样(在注释8中):其次,传递给它的是一个关于内置^{} 函数的包装器,它执行以下操作:
所以,您的意思是要比较两个列表项},它应该调用
x
和{cmp(len(x), len(y))
。换句话说,按长度排序。在如果你不明白
lambda x, y: cmp(len(x), len(y))
是什么意思
^{pr2}$lambda
表达式只是在表达式中间定义简单函数的一种方法。这个:…定义的函数与:
…只是它没有名称,可以在表达式的中间使用。因此,您的
lambda
与:本教程的Lambda forms部分解释了这一点……尽管没有更深入地解释,参考文档的Lambdas部分只是稍微更详细一些。在
{12{3}在Python和cdgni3}中都是非法的,除非你使用的是Python和cdgni3}都是非法的。在
正如gnibbler也指出的那样,在不需要的时候使用
lambda
是造成混淆的一个方法。在所以,罗曼的答案正是你应该做什么来代替这个。在
文档中的Sorting HowTo对所有这些都有很好的解释。在
相关问题 更多 >
编程相关推荐