如何对数字字符串的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】:
将它们转换为int
或float
甚至decimal
(因为它有尾随数字)
>>> b = [float(x) for x in b]
>>> b.sort()
>>> b
[949.0, 1099.0]
【讨论】:
这意味着改变b
中元素的类型,这可能是也可能不是理想的。以上是关于如何对数字字符串的python列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章