【问题标题】:Why does sorted not sort the array properly?为什么 sorted 不能正确排序数组?
【发布时间】:2020-12-02 00:01:25
【问题描述】:

我正在尝试使用 sorted 对 2d 数组按其第 4 个值从大到小进行排序,但由于某种原因,它没有正确排序。似乎正确地对两个值进行了排序,但仅此而已。我试图在互联网上查看如何使用 sorted 但似乎这应该正确排序:

stuff = [['A', '15', '23', '5'], ['A', '15', '23', '2'], ['A', '15', '23', '17'], ['A', '15', '23', '16'], ['A', '15', '23', '12']]
stuff = sorted(stuff, key=lambda x: x[3], reverse = True)
print(stuff)

这是我得到的输出: [['A', '15', '23', '5'], ['A', '15', '23', '2'], ['A', '15', '23', '17'], ['A', '15', '23', '16'], ['A', '15', '23', '12']]

【问题讨论】:

  • 好的,这个结果有什么问题?
  • 需要在key函数中转成整数:即int(x[3])

标签: python arrays python-3.x sorting


【解决方案1】:

那是因为您的 key 函数正在比较字符串值。因此,当它尝试将'2''17' 进行比较时,它会逐个字符地进行比较,并且由于'2' > '1',它认为它具有更大的价值。

您可以通过在 stuff 数组第 4 项上使用整数来轻松解决此问题:

stuff = [['A', '15', '23', 5], ['A', '15', '23', 2], ['A', '15', '23', 17], ['A', '15', '23', 16], ['A', '15', '23', 12]]

或者通过调用int在key函数上将字符串转换为整数:

stuff = sorted(stuff, key=lambda x: int(x[3]), reverse = True)

【讨论】:

    【解决方案2】:

    排序很好,因为按字典顺序 '5' 大于 '17'。

    【讨论】:

    • 这应该是评论而不是答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多