一尘不染

Python-如何对字符串列表进行数字排序?

python

我知道这听起来微不足道,但是我没有意识到sort()Python 的功能很奇怪。我有一个实际上是字符串形式的“数字”列表,因此我先将它们转换为整数,然后尝试进行排序。

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

我四处寻找与排序数字集相关的算法,但是我发现所有算法都涉及对字母数字集进行排序。

我知道这可能是个没有脑子的问题,但是google和我的教科书没有提供比该.sort()功能有用的功能。


阅读 1680

收藏
2020-02-16

共1个答案

一尘不染

您实际上尚未将字符串转换为int。或者说,您做了,但是对结果却什么也没做。您想要的是:

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

如果由于某种原因需要保留字符串而不是整数(通常是一个坏主意,但是可能需要保留前导零或其他东西),则可以使用键函数。sort接受一个命名参数,key该参数是在比较每个元素之前对其进行调用的函数。比较键函数的返回值,而不是直接比较列表元素:

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