我怎样才能使 .sort() 方法不仅仅按第一个数字排序?

How might I go about making the .sort() method sort by more than just the first digit?

我正在尝试对列表进行排序。但是当我尝试时,它似乎总是只按第一个数字排序。

这是我的代码:

data = input("enter your data separated by spaces: ")
data = data.split(' ')
data.sort()

我的输入只是数字。例如。 1 25 3 466 4 32 5 但是有了这个输入,输出就像 1 25 3 32 466 4 5 我的目标是正确排序可变数据。我希望前面提到的输入的输出为 1 3 4 5 25 32 466。我是 python 的新手,所以如果这个问题很简单或者我的术语不正确,我深表歉意。

您没有数字列表,您有一个 字符串列表 恰好是(希望)数字的字符串表示形式。因此,它们被排序为字符串。作为字符串,"25" 出现在 "3" 之前,原因与 "Jacky" 出现在 "K" 之前的原因相同。

有两种基本方法可以解决这个问题。

如果您确实需要一个数字列表,请将每个字符串转换为一个数字。例如:

data = [int(numstr) for numstr in data]

如果您想保留一个字符串列表,但仍要将它们排序,就好像它们是数字一样,您可以使用key函数:

data.sort(key=int)

如果有人输入 spam 而不是 25,其中任何一个都会引发 ValueError。在这种情况下,您需要决定要做什么。也许只是 ValueError 失败就可以了。或者你可能想要一个循环,永远要求一个新的输入行,直到他们给你一个有效的输入行。或者,也许您想静静地跳过 non-integers,或者将它们排序到最后,或者……无论您想做什么,都可以做,但直到您决定要做什么。

您正在按字母顺序对输入进行排序:

>>> sorted(["5", "10", "1", "100"])
['1', '10', '100', '5']

'5' > '100',与 'e' > 'a''east' > 'apple' 相同,它们稍后出现在 ordinal values:

>>> ord('a')
97
>>> ord('e')
101
>>> ord('1')
49
>>> ord('5')
53

由于您要对数字进行排序,请在排序之前将您的输入转换为数字:

>>> data = input("enter your data separated by spaces: ")
enter your data separated by spaces: 1 10 100 5
>>> data = [int(n) for n in data.split(' ')]
>>> data.sort()
>>> data
[1, 5, 10, 100]

如果你想保留它们的字符串,你可以使用键将输入作为整数进行比较:

>>> data = input("enter your data separated by spaces: ")
enter your data separated by spaces: 1 10 100 5
>>> data = data.split(' ')
>>> data.sort(key=int)
>>> data
['1', '5', '10', '100']