s中lambda函数的理解困难

2024-05-19 21:56:09 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我定义了一个列表列表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函数的作用?


Tags: lambda函数元素列表定义排序数字sort
3条回答

实际上,使用key参数对sort执行此操作更好,cmp有些过时。

例如:

lol.sort(key=lambda x: x[2])

(也可以使用x[-1]表示列表的最后一个元素)

您正在创建lambda并将其传递到sort函数中。你也可以这样写:

get_third_element = lambda x: x[2]
lol.sort(key=get_third_element)

或者更容易理解:

def get_third_element(x):
    return x[2]

lol.sort(key=get_third_element)

没有理由不能将函数作为参数传递给另一个函数!

Then lambda inside a sort? I am lost!

基本上,当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])。

关于你的第二颗子弹:

... could anybody explain what the lambda function does"

如果你问什么是lambda函数:它是一个匿名的轻量级内联函数。匿名意味着它没有标识符。(但你可以指定一个。e、 g.:sqr = lambda x : x**2现在可以像其他函数一样使用:y = sqr(2)

Normal function: def name(arg): vs lambda-function: lambda   arg: ret_value
                  ^    ^    ^                          ^   ^  ^       ^
                  a)   b)   c)                         a)  b) c)      d)
  • a) 关键字,将以下内容标记为normal/lambda函数
  • b) 因此,如果lambda函数“丢失”,则为函数名 匿名的
  • c) 函数参数:普通函数->;方括号,lambda函数->;不带
  • d) 返回值-如果省略了normal函数,因为 必须用return显式返回。(不明确返回 无传递)lambda隐式返回 结肠右侧的评估。

排序函数的使用示例是lambda函数的典型用例。它们被用作“丢弃”函数,可以内联而不创建自己的普通函数。

更为“Python式”的变化可能是:

from operator import itemgetter

keyfunc = itemgetter(2) # takes the 3rd argument from an itterable
sorted_list = sorted(lol, key=keyfunc, reverse=True)

相关问题 更多 >