Python 我如何让.sort()方法不仅仅按第一个数字排序?
我正试图整理一份清单。但当我尝试时,它似乎总是按第一个数字排序 这是我的代码:Python 我如何让.sort()方法不仅仅按第一个数字排序?,python,python-3.x,python-3.4,Python,Python 3.x,Python 3.4,我正试图整理一份清单。但当我尝试时,它似乎总是按第一个数字排序 这是我的代码: data = input("enter your data separated by spaces: ") data = data.split(' ') data.sort() 我输入的只是数字。例12534664325 但是有了这个输入,输出就有点像12533246645 我的目标是让变量数据正确排序。我希望前面提到的输入的输出是1 3 4 5 25 32 466。我是python新手,所以如果这个问题很简单或者
data = input("enter your data separated by spaces: ")
data = data.split(' ')
data.sort()
我输入的只是数字。例12534664325
但是有了这个输入,输出就有点像12533246645
我的目标是让变量数据正确排序。我希望前面提到的输入的输出是1 3 4 5 25 32 466。我是python新手,所以如果这个问题很简单或者我的术语不适用,我很抱歉。您没有数字列表,您有一个字符串列表,碰巧是(希望是)数字的字符串表示形式。因此,它们被排序为字符串。作为字符串,
“25”
位于“3”
之前,原因与“Jacky”
位于“K”
之前相同
有两种基本方法可以解决这个问题
如果您确实想要一个数字列表,请将每个字符串转换为一个数字。例如:
data = [int(numstr) for numstr in data]
如果要保留字符串列表,但仍将其作为数字进行排序,则可以使用键
函数:
data.sort(key=int)
这两个选项中的任何一个都会引发
ValueError
如果有人键入spam
而不是25
。你需要决定在那种情况下你想做什么。可能只是因为出现ValueError
而失败就可以了。或者你想要一个循环,永远要求一个新的输入行,直到他们给你一个有效的。或者,您想悄悄地跳过非整数,或者将它们排序到最后,或者……无论您想做什么,您都可以这样做,但在您决定要做什么之前。您正在按字母顺序对输入进行排序:
>>> sorted(["5", "10", "1", "100"])
['1', '10', '100', '5']
'5'>'100'
,就像'e'>'a'
或'east'>'apple'
一样,它们后面会出现:
由于您正在对数字进行排序,请在对其进行排序之前将输入转换为数字:
>>> 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']
请提供输入列表和输出列表的一般示例:编写
键
方法。但我们无法提供更多帮助,因为我们不知道您正在尝试对哪些数据进行排序,如何对其进行排序,或者您已经尝试了什么。看一看。猜测一下,你会对表示数字的字符串的字典排序感到惊讶,在这种情况下,在对它们进行排序之前,可能会尝试将它们转换为实际数字?
>>> 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']