Lambda函数行为

时间:2017-05-20 22:49:41

标签: python lambda

我正在尝试理解下面lambda的行为。实际传递给参数pair的值是多少?这有助于我理解返回部分pair[1]

pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print (pairs)

据我了解,sort会对列表pairs进行排序。它将比较函数是否作为参数传递。那我怎么得到以下输出:

OUTPUT:
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

3 个答案:

答案 0 :(得分:3)

如果要按数值排序,请将lambda更改为

pairs.sort(key=lambda pair: pair[0])

Python是零索引的。每个元组的第一个元素都有索引0. pair[1]将引用元组中的单词,而不是数字。因此,如果您希望按字母顺序对文本进行排序,那么您的工作是什么。

如果你想看看正在通过lambda传递什么 - 这是你的问题:

from __future__ import print_function #Needed if you're on Python 2
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: print(pair[1]))

返回

one
two
three
four

通过检查print(pair[0])print(pair)

的输出来验证这一点

答案 1 :(得分:2)

lambda函数接收一个参数,在您的情况下是一个大小为2的元组,并返回第二个元素(在您的情况下为字格式的数字)。 sort方法将根据传递给它的键对您的对列表进行排序,这是代码中的lambda函数。在python中,当对字符串列表进行排序时,它将按字典顺序排序,因此您的代码将以第二个元素按字典顺序排序的方式对这些对进行排序。

答案 2 :(得分:2)

尽可能避免使用lambda表达式。有一次,他们将完全从语言中被淘汰,并引入了各种辅助函数和类来填补可能留下的空白。 (最终,lambda表达式幸存下来,但助手仍然存在。)

其中一个是itemgetter类,可用于定义适用于sort的函数。

from operator import itemgetter
pairs.sort(key=itemgetter(0))

(正如@metropolis指出的那样,你想用0而不是1来按每对的初始整数分量排序。)