我正在尝试对列表进行排序。但是当我尝试时,它似乎总是只按第一个数字排序。
这是我的代码:
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的新手,所以如果这个问题很简单或我的术语已经关闭,我道歉。
答案 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']