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

2024-04-20 13:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这听起来很琐碎,但我没有意识到Python的sort()函数很奇怪。我有一个实际上是字符串形式的“数字”列表,所以我首先将它们转换为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']

我四处寻找了一些与排序数字集相关的算法,但我找到的这些算法都涉及排序字母数字集。

我知道这可能是一个很简单的问题,但是google和我的教科书并没有提供任何比.sort()函数更有用的东西。


Tags: 函数字符串in算法列表for排序数字
3条回答

可以将函数传递给key参数。这样,系统将按键(x)而不是x进行排序

list1.sort(key=int)

顺便说一下,要将列表永久转换为整数,请使用the ^{} function

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

或列表理解

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

实际上你还没有把字符串转换成int。或者更确切地说,是你做的,但是你没有对结果做任何事情。你想要的是:

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

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

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

如果您想使用^{}函数:sorted(list1, key=int)

它返回一个新的排序列表。

相关问题 更多 >