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

新手上路,请多包涵

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

 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() 功能或多或少有用的东西。

原文由 Brian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 526
2 个回答

您实际上还没有将字符串转换为整数。或者更确切地说,你做了,但是你没有对结果做任何事情。你想要的是:

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

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

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

原文由 Seamus Campbell 发布,翻译遵循 CC BY-SA 4.0 许可协议

我昨天遇到了同样的问题,发现了一个名为 natsort 的模块,它解决了你的问题。采用:

 from natsort import natsorted # pip install natsort

# Example list of strings
a = ['1', '10', '2', '3', '11']

[In]  sorted(a)
[Out] ['1', '10', '11', '2', '3']

[In]  natsorted(a)
[Out] ['1', '2', '3', '10', '11']

# Your array may contain strings
[In]  natsorted(['string11', 'string3', 'string1', 'string10', 'string100'])
[Out] ['string1', 'string3', 'string10', 'string11', 'string100']

它也适用于字典,相当于 sorted

原文由 lrsp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题