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

Posted

技术标签:

【中文标题】如何对数字字符串的python列表进行排序【英文标题】:How to sort python list of strings of numbers 【发布时间】:2013-07-02 16:34:44 【问题描述】:

我正在尝试对包含数字的字符串列表进行排序

a = ["1099.0","9049.0"]
a.sort()
a
['1099.0', '9049.0']

b = ["949.0","1099.0"]
b.sort()    

b
['1099.0', '949.0']

a
['1099.0', '9049.0']

但列表 b 正在排序,而不是列表 a

【问题讨论】:

a 已排序。 1 小于 9 我希望较大的数字始终位于索引0,较小的数字位于索引0 Sorting numbers in string format with Python的可能重复 Sorting a list of version strings的可能重复 How to sort a list numerically?的可能重复 【参考方案1】:

您想根据float 值(不是字符串值)进行排序,所以试试:

>>> b = ["949.0","1099.0"]
>>> b.sort(key=float)
>>> b
['949.0', '1099.0']

【讨论】:

【参考方案2】:

在 sort 内使用 lambda 将它们转换为浮点数,然后正确排序:

a = sorted(a, key=lambda x: float(x))

所以你会将它们保存为字符串,但按值排序,而不是按字典排序

【讨论】:

@Keyser 我的意思是你不需要 lambda,你可以使用 key=float 让我的回答更酷?实际上,我忘记了关键功能。 @Keyser 使用 sort(key=float) 实现相同的效果【参考方案3】:

如果有人处理数字和扩展名,例如 0.png、1.png、10.png、2.png... 我们需要检索扩展名之前的字符并对其进行排序,因为此扩展名不允许我们将名称转换为浮点数:

myList = sorted(myList, key=lambda x: float(x[:-4]))

【讨论】:

记得像myList = sorted(myList, key=lambda x: float(x[:-4]))一样更新列表【参考方案4】:

将它们转换为intfloat 甚至decimal(因为它有尾随数字)

>>> b = [float(x) for x in b]
>>> b.sort()
>>> b
[949.0, 1099.0]

【讨论】:

这意味着改变b中元素的类型,这可能是也可能不是理想的。

以上是关于如何对数字字符串的python列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

python:当它是数字列表时对字符串列表进行排序[重复]

Python:根据属性对对象列表进行排序

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

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

如何在Python中对版本标签列表进行排序[重复]

如何对在python中存储为字符串的整数列表进行排序[重复]