在Python中按数值排序浮点数 - 不是按ASCII顺序

0 投票
4 回答
2939 浏览
提问于 2025-04-17 01:38

这可能听起来像个傻问题,但我试着找答案却没什么成功。我有一个列表里面包含了多个列表:

for v in sorted(list):
    print v


[885.1, 12824]
[885.1, 19843]
[885.11, 1319]
[885.12, 1155]
[885.13, 12844]
[885.14, 33602]
[885.15, 11324]
[885.16, 44040]
[885.2, 119283]
[885.3, 8424]

我用 sorted 函数遍历了我的列表,但是这样排序出来的结果是按照 ASCII 码的顺序排列的——能不能把它们按浮点数的顺序排序成人类能读懂的样子?比如:

[885.1, 19843]
[885.2, 119283]
[885.3, 8424]
[885.11, 1319]
[885.12, 1155]
[885.13, 12844]
[885.14, 33602]
[885.15, 11324]
[885.16, 44040]

我需要创建某种索引吗?把我的浮点数转换成整数吗?非常感谢任何帮助。

大卫。

4 个回答

1

你需要给排序函数提供一个比较的方式。可以写成下面这样的:

sorted(list, cmp=lambda x, y: cmp(x[0], y[0]))

只要写出你需要的函数,然后把它放进去就行了。

你可能会想要一种类似反向基数排序的方式。

1

这被称为“自然排序”(natsort)。你可以在网上快速搜索一下,找到这个链接:http://www.skynet.ie/~caolan/Packages/python-natsort.html(不过我还没试过)。也许对你有帮助。

哦,对了,这不一定是ASCII排序,它只是按照数字的顺序来排,就像真实的数轴一样。

3

先把浮点数转换成字符串,然后用“.”来分割它:

sorted(a, key=lambda x:map(int, str(float(x[0])).split(".")))

撰写回答