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

时间:2015-01-29 21:38:57

标签: python sorting sorted

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"的正确顺序。但由于某种原因,我得到的输出正数是正确的,但负数不是。对我做错了什么的见解?谢谢!

2 个答案:

答案 0 :(得分:2)

您正在排序字符串,而不是数字,这些是排序lexicographically;喜欢字典中的单词。 -恰好在数字前排序,但'1'仍在'3'之前排序。此外,'10''2'之前排序,因为'1'位于字符表中'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

答案 1 :(得分:0)

您可以使用正则表达式:

>>> 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'
相关问题