Python beginner - Sorting tuples using lambda functions
我正在阅读有关Python的教程简介,并且坚持理解一段代码。这是来自本教程的4.7.5节。
1 2 3 | pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] pairs.sort(key=lambda pair: pair[1]) pairs |
这部分代码返回
1 | [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')] |
因此,在第一行中,它定义了具有不同元组列表的对。我明白了。
第二行是我完全被抛弃的地方,为了弄清楚正在发生的事情,我做了很多的弄乱工作。
我发现sort()正在将内置函数应用于变量对,并且大概是按照我给出的指令对其进行排序。
sort()函数需要一个键,而键必须使用一个函数来定义,因此要使用lambda。我认为所有这些都是正确的,但我可能离这里很远。
Lambda在冒号的左侧定义了一个新参数" pair",而在右侧则是用于定义lambda函数的返回值的计算。
那就是我被抛弃的地方。" pair [1]"是做什么的?它对结肠左侧的"对"有什么影响?
它返回什么值?我似乎无法让它像这样编码之外返回任何类型的值。
我猜测它以某种方式指向一个特定的元组,并根据重新定位对其进行排序,但是我不确定其背后的逻辑。
谁能为我解释一下?谢谢。
有时,当开始使用
1 2 | def sort_key(pair): return pair[1] |
如果我们想更详细些,我们可以解开配对以使其更加明显:
1 2 3 | def sort_key(pair): int_value, string_value = pair return string_value |
因为
通过在表达式之前添加
1 | def lambda_function(pair): return pair[1] |
因此,此处
您可以通过将lambda分配给变量
1 2 3 4 5 6 | >>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] >>> key = lambda pair: pair[1] >>> key(pairs[0]) 'one' >>> key(pairs[1]) 'two' |
在Randal L. Schwartz(在Perl中普及该技术)之后,这种按其他键排序的形式通常称为Schwartzian变换。
您的lambda函数将一个元组作为输入,并返回索引为1的元素(因此,第二个元素的索引号为0)。
因此排序只会考虑每个元组的第二个元素(英文单词)。这就是为什么您的输出在第二个元素