Python中sort函数使用lambda作为key的排序结果疑问
问题解答
首先明确代码里的排序逻辑:sort方法的key参数指定的是字符串中不同字符的数量,不是总字符数,也不是字母顺序。我们逐个计算每个字符串对应的key值:
'aaaa':转成集合后是{'a'},不同字符数量为1'foo':转成集合后是{'f','o'},不同字符数量为2'abab':转成集合后是{'a','b'},不同字符数量为2'bar':转成集合后是{'b','a','r'},不同字符数量为3'card':转成集合后是{'c','a','r','d'},不同字符数量为4
排序时会先按这个key值从小到大排列:
- key=1的
'aaaa'排第一 - 接着是key=2的两个元素,Python的排序是稳定排序,当key值相同时,会保留它们在原列表中的相对顺序——原列表里
'foo'在'abab'前面,所以排序后这两个的顺序是'foo'在前,'abab'在后 - 然后是key=3的
'bar',最后是key=4的'card'
这就是最终输出['aaaa', 'foo', 'abab', 'bar', 'card']的原因,教材里的“单词字母数量”表述不准确,实际是不同字符的数量。
内容的提问来源于stack exchange,提问作者jumi
相关产品推荐
相关产品推荐

