这可能听起来像一个愚蠢的问题,但我试图找到一个没有太大成功的答案。我有一份清单清单:
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]
我使用排序函数遍历我的列表 - 但是如上所述以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]
我是否需要创建somekind的索引?将我的浮点数转换为整数?任何帮助非常感谢。
大卫。
答案 0 :(得分:3)
首先将float转换为字符串并将其拆分为“。”:
sorted(a, key=lambda x:map(int, str(float(x[0])).split(".")))
答案 1 :(得分:1)
这称为“natsort”(自然排序)。一个快速的谷歌给我这个:http://www.skynet.ie/~caolan/Packages/python-natsort.html(虽然没有尝试过)。也许它可以帮助你。
哦,这不一定是ASCII排序,它只是数字顺序,你知道,就像真正的轴
答案 2 :(得分:1)
你需要给出一个比较函数。如下所示:
sorted(list, cmp=lambda x, y: cmp(x[0], y[0]))
只需编写您想要的功能并将其插入即可。
你可能想要像反向基数那样的东西。
答案 3 :(得分:1)
这是一种黑客攻击,但是:
a = [
[885.1, 19843],
[885.1, 12824],
[885.11, 1319],
[885.12, 1155],
[885.13, 12844],
[885.14, 33602],
[885.15, 11324],
[885.16, 44040],
[885.2, 119283],
[882.8, 8424],
[882.75, 8424],
[885.3, 8424]
]
for v in sorted(a, key=lambda t: str(t[0]).split(".")[0] + ("%05d" % int(str(t[0]).split(".")[1])) + "," + str(t[1])):
print v
结果是
[882.8, 8424]
[882.75, 8424]
[885.1, 12824]
[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]
免责声明:这假定小数点后最多5个位置。相应调整。