【发布时间】:2017-02-09 06:44:11
【问题描述】:
我正在阅读 Python 的教程介绍,但我一直在理解一段代码。这来自本教程的第 4.7.5 节。
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
pairs
这段代码返回
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
所以在第一行,它用不同元组的列表定义了对。我明白了。 第二行是我完全被抛弃的地方,我已经做了很多事情来试图理解发生了什么。
我发现 sort() 正在将内置函数应用于变量对,并且大概是按照我给它的指令对其进行排序。
sort() 函数需要一个键,而键必须使用函数来定义,因此使用了 lambda。我认为所有这些都是正确的,但我可能离这里很远。
Lambda定义了一个新的参数,冒号左边是“pair”,右边是定义lambda函数返回值的计算。
这就是我被抛弃的地方。 “对[1]”有什么作用?它对结肠左侧的“对”有什么影响?
它返回什么值?除了像这样编码之外,我似乎无法让它返回任何类型的值。
我猜它以某种方式指向一个特定的元组并根据重新定位对其进行排序,但我不确定其背后的逻辑。
谁能帮我解释一下?谢谢。
【问题讨论】:
-
使用
lambda,您可以引用需要排序的值。 -
如果您先调用
key = lambda pair: pair[1],然后调用key(pairs[0])并将其与key(pairs[1])进行比较,会有帮助吗?如果我告诉你最终结果是按每个元组的第二个元素的字母顺序排序的呢?