【问题标题】:why sort in python is not working?为什么在python中排序不起作用?
【发布时间】:2015-07-24 20:03:33
【问题描述】:
code:
list=['1','85863','432','93','549834']
list.sort()
print (list)

Actual output:
>>> 
['1', '432', '549834', '85863', '93']
#why sort is not working
Expected output:
['1','93','432','83863','549834']

我也尝试过其他排序操作,但它们显示的输出相同。 当我试图从键盘输入中读取列表时,他们只读取字符串而不是 int 请帮助我为什么?

【问题讨论】:

  • 您为什么期望这种排序顺序?
  • 您的预期输出既不按字母顺序也不按数字排序。
  • 对我来说看起来很有序。 (与您的预期输出相反,我找不到任何排序逻辑。除了数字之和,也许?)
  • 你可以从你在 SO 上看到的一些被否决的问题中编译出脑筋急转弯

标签: python list sorting


【解决方案1】:

当我试图从键盘输入中读取列表时,他们只读取字符串而不是 int 请帮助我为什么

如果x是字符串,只需使用int(x)转换为int

您正在排序字符串(文本),而不是像整数这样的数值

对于您的预期输出,您必须先转换为整数

my_list= ['1','85863','432','93','549834']
my_list = [int(x) for x in my_list]

现在您可以按数字排序,并获得整数列表

my_list.sort()

注意避免使用list作为变量名,它是Python内置的

【讨论】:

  • 他的预期输出也不是数字顺序。
  • 嗯,是的,如果预期的输出再次是整数或字符串列表,也不清楚
【解决方案2】:

我假设您想按总和进行排序以匹配您的预期输出:

l = ['1','85863','432','93','549834']

l.sort(key=lambda x: sum(map(int,x)))

print(l)
['1', '432', '93', '83863', '549834']

【讨论】:

  • 哈!很好的模式猜测正在进行中!
  • @bakkal,这是唯一有意义的事情,按长度、最后一位、第一位或其他任何东西排序都不会给出预期的输出
  • 哦,我喜欢你的解决方案,我们只是希望 OP 没有像他们搞砸了问题一样搞砸了预期的输出:P
  • @bakkal,这是一种明显的可能性!
【解决方案3】:

您需要先将字符串转换为 int。

list = [int(ele) for ele in list]
list.sort()
print list

【讨论】:

    【解决方案4】:

    没有int:

    lst = ['1','85863','432','93','549834']
    lst.sort()
    lst.sort(key=len)
    print(lst)
    

    这个给:

    ['1', '93', '432', '85863', '549834']
    

    如果你想要整数……

    my_int = int(input())
    

    【讨论】:

      【解决方案5】:

      我只是错过了将字符串转换为 int 的逻辑。默认情况下,python 输入将被视为字符串。所以,我们可以使用答案中提到的任何方法转换为字符串,然后sort() 方法在 int 上成功运行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 2018-12-18
        • 2020-09-07
        • 2021-07-01
        相关资源
        最近更新 更多