我一直在用Python上一门课,然后开始练习下面的代码
words = ['pear', 'cabbage', 'apple', 'bananas']
words.sort(key=lambda s: s[-1]) # Alternatively, key=operator.itemgetter(-1)
words # => ['cabbage', 'apple', 'pear', 'bananas'] ... Why 'cabbage' > 'apple'?
max(words, key=len) # 'cabbage' ... Why not 'bananas'?有谁能解释一下,为什么排序顺序是这样的?
为什么查找最大长度的项返回错误项?这根本不是预期的结果。
发布于 2018-03-03 10:14:55
使用最后一个字符作为排序标准。分类是稳定的。因此,对于这一清单:
words = ['pear', 'cabbage', 'apple', 'bananas']cabbage和apple对最后一个字母进行相等的比较,按照它们在原始列表中的顺序保持不变。
出于同样的原因,max给您cabbage。两者的长度相同:
>>> len('cabbage') == len('bananas')
True而cabbage在最初的列表中位于bananas之前。
文档很好地解释了这一点:
保证了
sort()方法的稳定性。如果保证不更改比较相等的元素的相对顺序,则排序是稳定的--这有助于对多个传递进行排序(例如,按部门排序,然后按薪等排序)。
发布于 2018-03-03 10:14:59
您的代码words.sort(key=lambda s:s[-1])按每个单词的最后一个字符对单词进行排序,如果存在多种可能性,则保持原始列表中的顺序。
如果您需要一个常规的字母排序,那么您需要使用words.sort(),结果是
>>> words.sort()
>>> words
['apple', 'bananas', 'cabbage', 'pear']如果按key=len对单词进行排序,则列表中包含[ ... , 'cabbage', 'bananas']。max()找到可能值列表的第一个值,因此它的结果是cabbage,正如它在bananas前面显示的那样。
https://stackoverflow.com/questions/49083023
复制相似问题