如何数字sorting列表?

我知道这听起来微不足道,但我没有意识到Python的sort()函数是奇怪的。 我有一个实际上是stringforms的“数字”列表,所以我首先将它们转换为整数,然后尝试sorting。

 list1=["1","10","3","22","23","4","2","200"] for item in list1: item=int(item) list1.sort() print list1 

给我:

 ['1', '10', '2', '200', '22', '23', '3', '4'] 

我想要的是

 ['1','2','3','4','10','22','23','200'] 

我查找了一些与sorting数字集相关的algorithm,但是我发现的algorithm都涉及sorting字母数字集。

我知道这可能是一个没有道理的问题,但谷歌和我的教科书没有提供比.sort()函数更有用的东西。

您还没有真正将您的string转换为整数。 或者说,你做了,但是你没有对结果做任何事情。 你想要的是:

 list1 = ["1","10","3","22","23","4","2","200"] list1 = [int(x) for x in list1] list1.sort() 

但是,python使它更容易:sort需要一个命名参数key,它是在比较每个元素之前调用的函数(但不需要修改列表)

 list1 = ["1","10","3","22","23","4","2","200"] # call int(x) on each element before comparing it list1.sort(key=int) 

您可以将一个函数传递给.sort方法的key参数。 有了这个,系统将按键(x)而不是xsorting。

 list1.sort(key=int) 

顺便说一句,要将列表永久转换为整数,请使用map函数

 list1 = list(map(int, list1)) # you don't need to call list() in Python 2.x 

或列表理解

 list1 = [int(x) for x in list1] 

如果你想使用sorted()函数: sorted(list1, key=int)

它返回一个新的sorting列表。

Python的sorting并不奇怪。 这只是这个代码:

 for item in list1: item=int(item) 

是不是在做你认为的东西 – item没有被重新放回到列表中,它只是被扔掉了。

无论如何,正确的解决scheme是使用key=int正如其他人向您展示的那样。

你也可以使用:

 import re def sort_human(l): convert = lambda text: float(text) if text.isdigit() else text alphanum = lambda key: [ convert(c) for c in re.split('([-+]?[0-9]*\.?[0-9]*)', key) ] l.sort( key=alphanum ) return l
import re def sort_human(l): convert = lambda text: float(text) if text.isdigit() else text alphanum = lambda key: [ convert(c) for c in re.split('([-+]?[0-9]*\.?[0-9]*)', key) ] l.sort( key=alphanum ) return l 

这是非常相似的其他东西,你可以在互联网上find,但也适用于字母数字如[abc0.1,abc0.2 ..]

Seamus Campbell的答案在python2.x上无效。
使用lambda函数的list1 = sorted(list1, key=lambda e: int(e))效果很好。

最近的解决scheme是正确的。 你正在阅读解决scheme作为一个string,在这种情况下,顺序是1,然后100,然后104然后是2然后21,然后2001001010,3等等。

你必须把你的input作为一个int来代替:

sortingstring:

stringList = (1, 10, 2, 21, 3)

整理:

intList = (1, 2, 3, 10, 21)

为了强制转换,只需将stringList放入int(blahblah)。

再次:

 stringList = (1, 10, 2, 21, 3) newList = int (stringList) print newList => returns (1, 2, 3, 10, 21) 
 scores = ['91','89','87','86','85'] scores.sort() print (scores) 

这对我使用python版本3,虽然它没有在版本2。