对 python 中的负整数字符串进行排序

Sorting negative integer strings in python

def sort_int_string(this_string):
    split_str = this_string.split()
    split_str.sort()
    join_str = ' '.join(split_str)
    return join_str

>>>print(sort_int_string("4 1 -1 -3"))
-1 -3 1 4

此代码旨在生成“-3 -1”的正确顺序,但出于某种原因,我得到的输出是正数正确但负数不正确。对我做错了什么有任何见解吗?谢谢!

您排序的是 字符串 ,而不是数字,而这些是排序的 lexicographically;就像字典里的单词。 - 恰好排在数字之前,但是 '1' 仍然排在 '3' 之前。此外,'10' 排在 '2' 之前,因为 '1' 在字符 table.

中排在 '2' 之前

通过在排序时将每个元素转换为整数来按数字排序:

split_str.sort(key=int)

演示,使用您更正的功能:

>>> def sort_int_string(this_string):
...     split_str = this_string.split()
...     split_str.sort(key=int)
...     join_str = ' '.join(split_str)
...     return join_str
... 
>>> print(sort_int_string("4 1 -1 -3"))
-3 -1 1 4

您可以使用正则表达式:

>>> import re
>>> sorted(re.findall(r'-?\d+', "4 1 -1 -3"), key=int)
['-3', '-1', '1', '4']

这会生成按值排序的字符串。

您可以重新加入一个字符串:

>>> sor=sorted(re.findall(r'-?\d+', "4 1 -1 -3"), key=int)
>>> ' '.join(sor)
'-3 -1 1 4'