如何对一个Python字符串数字列表进行排序

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

1
a 已经排序好了。19 小。 - Felix Kling
1
我希望较大的数字始终位于索引0,而较小的数字位于索引1 - Vaibhav Jain
可能是使用Python对字符串格式中的数字进行排序的重复问题。 - Grijesh Chauhan
可能是对版本字符串列表进行排序的重复问题。 - Teepeemm
2
可能是重复的问题:如何按数字大小排序列表? - Georgy
4个回答

93
您想根据 float 值(而不是字符串值)进行排序,因此可以尝试:
>>> b = ["949.0","1099.0"]
>>> b.sort(key=float)
>>> b
['949.0', '1099.0']

21
在'sort'中使用lambda将它们转换为浮点数,然后正确排序。
a = sorted(a, key=lambda x: float(x))

所以你将把它们保持为字符串,但按值排序而不是按字典顺序。

4
我的观点是你不需要使用lambda,你可以直接使用key=float - arshajii
让我的回答更酷?实际上,我忘记了关键函数。使用sort(key=float)可以实现相同的效果。@Keyser - Samuele Mattiuzzo

13

如果有人处理像0.png、1.png、10.png、2.png等数字和扩展名的情况...我们需要检索并排序扩展名前的字符,因为这个扩展名不允许我们将名称转换为浮点数:

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

温馨提示: 经过多年的经验积累,我已将此答案中的浮点数更改为整数,因为我认为这样更加高效和精确。很少需要使用浮点数来实现此目的,可能会带来错误。


1
记得更新列表,例如: myList = sorted(myList, key=lambda x: float(x[:-4])) - L.Goyal
如果你想更新列表,你也可以使用myList.sort(key=...)而不是sorted(myList, key=...) - Turun Ambartanen

3
将它们转换为intfloat甚至是decimal(因为它具有尾数)。
>>> b = [float(x) for x in b]
>>> b.sort()
>>> b
[949.0, 1099.0]

4
这将意味着更改 b 中元素的类型,这可能是理想的,也可能不是。 - arshajii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接