小能豆

如何按数字顺序对字符串列表进行排序

python

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

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

我查找了一些与对数字集进行排序相关的算法,但我发现所有算法都涉及对字母数字集进行排序。

我知道这可能是一个无需思考的问题,但是谷歌和我的教科书并没有提供比该.sort()功能更有用或更无用的东西。


阅读 40

收藏
2024-06-29

共1个答案

小能豆

您实际上并未将字符串转换为整数。或者说,您确实转换了字符串,但并未对结果执行任何操作。您想要的是:

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

如果出于某种原因您需要保留字符串而不是整数(通常不是一个好主意,但也许您需要保留前导零或其他内容),则可以使用key函数。sort采用命名参数key,这是一个在比较每个元素之前调用的函数。将比较 key 函数的返回值,而不是直接比较列表元素:

list1 = ["1","10","3","22","23","4","2","200"]
# call int(x) on each element before comparing it
list1.sort(key=int)
# or if you want to do it all in the same line
list1 = sorted([int(x) for x in list1]) 
2024-06-29