我怎样才能使.sort()方法排序超过第一个数字呢?

时间:2018-03-11 21:42:42

标签: python python-3.x python-3.4

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

这是我的代码:

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的新手,所以如果这个问题很简单或我的术语已经关闭,我道歉。

2 个答案:

答案 0 :(得分:1)

你没有数字列表,你有一个字符串的列表恰好是(希望)数字的字符串表示。因此,它们被排序为字符串。作为字符串,"25"位于"3"之前,原因与"Jacky" "K"之前的data = [int(numstr) for numstr in data] 相同。

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

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

key

如果你想保留一个字符串列表,但仍然排序它们就好像它们是数字一样,你可以使用data.sort(key=int) 函数:

ValueError

其中任何一个都会引发spam某人类型25而不是ValueError。在这种情况下,您需要决定要做什么。也许只是失败Msgbox "Row: " + resultat.cellAddress.Row 就好了。或许你想要一个循环,永远要求一个新的输入行,直到他们给你一个有效的。或许你想默默地跳过非整数,或者将它们排序到最后,或者......你想做什么,你可以做到,但直到你决定你想要什么。

答案 1 :(得分:1)

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

>>> 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']