【问题标题】:Why is sort function returning unexpected result?为什么排序函数返回意外结果?
【发布时间】:2021-01-16 08:41:47
【问题描述】:

当我在 python 中的列表上使用排序函数时,我没有得到我期望的结果。 就像我试图对这个列表进行排序一样:

    numbers = ['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']

排序后,我得到:

    ['-214', '-3', '-6', '-64', '0', '1', '29', '4', '4', '5', '54', '542', '6']

那么这里为什么打印 6>542 ?? 我还使用了 max() 函数,它返回 6。

我通过在排序函数中提供key=int得到了正确的结果,但是为什么没有key就这样打印呢?

【问题讨论】:

  • 它将它们排序为字符串,因为它们是字符串。排序前做numbers = [int(num) for num in numbers]得到你想要的结果
  • 因为它将它们按字符串排序,即按字典顺序
  • 当您使用key=int 时,它会在比较每个元素之前调用int 函数,因此这些元素将转换为整数,您会得到您所期望的结果。

标签: python-3.x list sorting integer max


【解决方案1】:

您有一个字符串列表,而不是整数,因此您需要告诉排序方法在排序之前将字符串转换为整数。

例如,这应该可以工作:

numbers = ['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']
numbers.sort(key=int)

这应该给你: ['-214', '-64', '-6', '-3', '0', '1', '4', '4', '5', '6', '29', '54', '542']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2023-03-03
    • 2011-12-02
    • 2016-05-21
    • 2023-03-16
    相关资源
    最近更新 更多