首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python排序()坏了吗?我没有得到这个列表中max()的输出

python排序()坏了吗?我没有得到这个列表中max()的输出
EN

Stack Overflow用户
提问于 2018-03-03 10:10:18
回答 2查看 103关注 0票数 1

我一直在用Python上一门课,然后开始练习下面的代码

代码语言:javascript
复制
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'?

有谁能解释一下,为什么排序顺序是这样的?

为什么查找最大长度的项返回错误项?这根本不是预期的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-03 10:14:55

使用最后一个字符作为排序标准。分类是稳定的。因此,对于这一清单:

代码语言:javascript
复制
words = ['pear', 'cabbage', 'apple', 'bananas']

cabbageapple对最后一个字母进行相等的比较,按照它们在原始列表中的顺序保持不变。

出于同样的原因,max给您cabbage。两者的长度相同:

代码语言:javascript
复制
>>> len('cabbage') == len('bananas')
True

cabbage在最初的列表中位于bananas之前。

文档很好地解释了这一点:

保证了sort()方法的稳定性。如果保证不更改比较相等的元素的相对顺序,则排序是稳定的--这有助于对多个传递进行排序(例如,按部门排序,然后按薪等排序)。

票数 2
EN

Stack Overflow用户

发布于 2018-03-03 10:14:59

您的代码words.sort(key=lambda s:s[-1])按每个单词的最后一个字符对单词进行排序,如果存在多种可能性,则保持原始列表中的顺序。

如果您需要一个常规的字母排序,那么您需要使用words.sort(),结果是

代码语言:javascript
复制
>>> words.sort()
>>> words
['apple', 'bananas', 'cabbage', 'pear']

如果按key=len对单词进行排序,则列表中包含[ ... , 'cabbage', 'bananas']max()找到可能值列表的第一个值,因此它的结果是cabbage,正如它在bananas前面显示的那样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49083023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档