【问题标题】:Python.. Accessing the default sort function?Python .. 访问默认排序功能?
【发布时间】:2019-02-27 15:47:14
【问题描述】:

Python 代码:

b=['six', 'small', 'he', 'foxes', 'saw']
b.sort(key=len)
b

输出:

['he', 'six', 'saw', 'small', 'foxes']

在上面的代码中,我按照元素的长度排序,得到了上面的输出。

我想要的输出是这样的:['he', 'saw', 'six', 'small', 'foxes']

所以我想要第一个按长度排序。然后对于长度相同的元素,我想按字母顺序排序。

我的问题:有没有办法在不编写自定义函数的情况下做到这一点?也许是这样的:

b.sort(key=[len,sorted]) # this doesn't work but I think it explains the idea.

谢谢!

【问题讨论】:

  • Then for elements with the same length I want to sort alphabetically. -- 这是不是应该是['he', 'saw', 'six', 'foxes', 'small']
  • 描述的顺序应该是:['he', 'saw', 'six', 'foxes', 'small']

标签: python list sorting


【解决方案1】:

我们可以使用复合排序键,首先按长度排序,然后按字典顺序排序。我们通过创建一个元组来做到这一点,因为元组自然会按照它们出现的顺序使用元素进行排序。

b = ['six', 'small', 'he', 'foxes', 'saw']
b.sort(key=lambda s: (len(s), s))

为了记录,上面的结果是这个排序列表::

['he', 'saw', 'six', 'foxes', 'small']

问题中规定的正确顺序是什么(但问题中的示例输出是错误的,所以在投反对票之前请注意!)

【讨论】:

  • 各位,我的回答中的顺序正确的。问题中的预期输出不正确! ['he', 'saw', 'six', 'foxes', 'small'] 是描述的顺序
  • 我建议您在答案中添加关于输出的描述
  • @ÓscarLópez 从未否决过您的问题,只是发表了评论。之后,我再次检查了问题以确定,并编辑了问题,之后删除了无用的评论并投票。
  • 你是对的......我只是专注于“锯”和“六”......谢谢
【解决方案2】:

一个简单的选择是排序两次:

b.sort()
b.sort(key=len)

由于排序是稳定的,它保持元素的顺序,以防它们根据key相等;因此,通过首先按字母顺序排序,具有相同长度的项目保持这种排序方式。

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2021-03-19
    • 2018-10-27
    • 2013-06-07
    相关资源
    最近更新 更多