为什么对带有数字的字符串进行排序的结果与仅对数字进行排序的结果不同?

Why does sorting strings with numbers have a different result than just sorting the numbers?

提问人:ajith3530 提问时间:7/12/2021 最后编辑:Charles Duffyajith3530 更新时间:7/12/2021 访问量:1407

问:

这是 python 输出:

->排序([“0”, “-1”, “1”, “-100”, “100”])

-> ['-1', '-100', '0', '1', '100']

我的期望是 ['-100', '-1', '0', '1', '100'],因为数字刻度为 -1 > -100。 为什么 -100 在这里被视为比 -1 更高的值?我只是想理解其中的逻辑。

排序 与语言无关

评论

0赞 Scott Hunter 7/12/2021
因为它们是恰好表示整数的字符串。
1赞 jasonharper 7/12/2021
出于同样的原因,“他”按字母顺序出现在“你好”之前。
1赞 Tim Peters 7/12/2021
你正在对字符串进行排序 - Python 不知道你认为它们代表整数。如果要对整数进行排序,则必须先将字符串转换为整数。例如,生成 .sorted(map(int, ["0", "-1", "1", "-100", "100"]))[-100, -1, 0, 1, 100]
1赞 John Gordon 7/12/2021
字符串的排序方式与整数不同。 在字典中排在前面,但大于 。aaaaab111112
1赞 rcgldr 7/12/2021
@JohnGordon - 我想你的意思是字符串“11111”会小于字符串“2”。

答:

3赞 Charles Duffy #1

对字符串进行排序通常是在所有语言中完成的,而不仅仅是 Python,使用相同的算法,一种逐个字符操作的算法。

  1. 从每个输入字符串的第一个字符开始。
    • 左边的第一个字符比右边的字符大吗?然后确定第一个字符串作为一个整体更大。
    • 右边的第一个字符比左边的字符大吗?然后确定第二个字符串作为一个整体更大。
    • 两个角色是一样的吗?那么我们还没有完成。
  2. 转到下一个字符并重复。
    • 两边没有下一个字符吗?那么绳子最短的一侧就更小了。

按照该算法,小于 因为小于 。'10''2''1''2'

如果想要反映数值比较的结果,则需要将值作为数字进行比较,而不是字符串。

评论

0赞 ajith3530 7/12/2021
感谢您的详细澄清,这是我遇到的一般编码问题之一。我试图理解这种行为背后的逻辑,因为如果你对字符串比较一无所知,推理就不直观了。