【问题标题】:When my code sorts the inputs, why doesn't it work in certain scenarios?当我的代码对输入进行排序时,为什么它在某些情况下不起作用?
【发布时间】:2012-06-05 18:53:37
【问题描述】:

我是 Python 新手。 首先,代码应该接受一个输入(以“x/y/z”的形式,其中 x、y 和 z 是任何正整数)并将其拆分为三个不同的变量。

input = raw_input()
a, b, c = input.split("/", 2)

我希望我的代码的第二部分采用这三个变量并根据它们的数值对它们进行排序。

order = [a, b, c]
print order
order.sort()
print order

虽然这对于大多数输入都非常有效,但我发现对于输入“23/9/2”和“43/8/2”,输出尚未排序,因此未按正确顺序返回。关于什么可能导致这些输入不起作用的任何想法?

【问题讨论】:

    标签: python sorting input


    【解决方案1】:

    问题是您正在对字符串进行排序,并期望它们像整数一样被排序。如果您想进行数字排序,请先将字符串列表转换为整数列表。

    >>> sorted(['23', '9', '2'])
    ['2', '23', '9']
    >>> sorted(map(int, ['23', '9', '2']))
    [2, 9, 23]
    

    以下是重写代码的方法:

    input = raw_input()
    a, b, c = map(int, input.split("/", 2))
    order = [a, b, c]
    print order
    order.sort()
    print order
    

    如果您需要将它们转换回字符串,只需使用map(str, order)。请注意,在 Python 2.x 上 map() 返回一个列表,而在 3.x 上它将返回一个生成器。

    【讨论】:

    • 知道了!非常感谢您的快速帮助。
    • +1 以获得清晰的答案和良好的信息。 @Zach,不要忘记接受解决您问题的答案。保持 SO 爱情火车滚动。
    • 感谢@JoeFish 的提醒。 SO 告诉我,我必须等待 10 分钟才能接受答案,我离开电脑的时间太长了。
    【解决方案2】:

    您正在对字符串进行排序,但您应该对整数进行排序。因此,您必须使用int 将每个字符串转换为整数:

    order = [int(a), int(b), int(c)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2015-11-17
      相关资源
      最近更新 更多