假设我定义了一个列表列表lol
:
lol = [['malasia', 0.02, 56.3], ['chile', 0.03, 34.9],
['hungria', 0.01, 45.9], ['ahumada', 0.001, 1]]
那么
lol.sort(lambda x, y: cmp(y[2], x[2]))
按每个子列表的最后一个元素lol
排序。。。
我只是想了解sort
的组成部分:
cmp(y,x)
与数字进行比较,返回-1
(y减去x)、0
(x等于y)或1
(y大于x)。
lambda
是在每个列表的最后一个元素上定义函数吗?
那么兰姆达在一种里面?我很困惑-谁能解释一下lambda函数的作用?
实际上,使用
key
参数对sort
执行此操作更好,cmp
有些过时。例如:
(也可以使用x[-1]表示列表的最后一个元素)
您正在创建lambda并将其传递到
sort
函数中。你也可以这样写:或者更容易理解:
没有理由不能将函数作为参数传递给另一个函数!
基本上,当
sort()
需要比较两个元素时,它调用lambda函数并使用其结果来确定两个元素中的哪一个应该首先出现。这就是它的全部。示例中的lambda函数确定哪个项优先。
在“经典”情况下,它只需计算
x-y
:如果结果是negative
,则意味着x is smaller
然后是y,因此是before y
。另外,您可以向sort方法传递一个反向参数,它将
reverse=True
顺序。在本例中,“sort”函数是“lambda wrapper”中的cmp函数。其中,用y替换x的顺序,并使用第三个参数,这意味着它按相反的顺序排序(x/y-swap),并通过比较所有第三个参数来完成排序(
x[2]
)。关于你的第二颗子弹:
如果你问什么是lambda函数:它是一个匿名的轻量级内联函数。匿名意味着它没有标识符。(但你可以指定一个。e、 g.:
sqr = lambda x : x**2
现在可以像其他函数一样使用:y = sqr(2)
)排序函数的使用示例是lambda函数的典型用例。它们被用作“丢弃”函数,可以内联而不创建自己的普通函数。
更为“Python式”的变化可能是:
相关问题 更多 >
编程相关推荐