如何在python中对具有浮点值的列表进行排序? [复制]

Posted

技术标签:

【中文标题】如何在python中对具有浮点值的列表进行排序? [复制]【英文标题】:How to sort the list having float values in python? [duplicate] 【发布时间】:2018-10-23 05:06:44 【问题描述】:

我的输出像 -

x1 = [['10.0', '[9.8-10.2]'], ['10.4', '[10.0-10.8]'], ['10.9', '[8.7-13.7]'], ['102.3', '[96.1-108.9]'], ['107.8', '[99.5-116.9]'], ['108.4', '[98.1-119.6]'], ['109.9', '[100.6-120.7]'], ['11.0', '[10.8-11.2]'], ['11.1', '[10.5-11.7]'], ['11.2', '[10.9-11.5]'], ['11.2', '[11.0-11.4]'], ['11.3', '[10.6-12.0]'], ['11.6', '[11.4-11.9]'], ['110.7', '[97.9-125.9]'], ['117.3', '[108.8-126.2]'], ['118.1', '[106.1-130.8]'], ['119.4', '[102.9-137.8]'], ['12.2', '[11.5-12.9]'], ['12.6', '[12.3-12.9]']]

这是在排序之后,但它返回 10.0, 10.4, 10.9, 102.3, 107.8, 108.4, 109.9, 11.0,11.1 等等,但它应该是这样的 - 10.0, 10.4, 10.9, 11.0,11.1, 102.3, 107.8、108.4、109.9

我尝试的如下:

for x3 in ss:
    if x3[0].isdigit():
        ss = float(x3[0])

x1 = sorted(ss, key = itemgetter(0))
print x1

上面的输出是 x1。

即使不使用 isdigit() 和 float(),输出也是一样的。 x1 = 排序(ss,键 = itemgetter(0)) 打印 x1

【问题讨论】:

【参考方案1】:

这应该可以解决您的问题:

sorted(x1, key=lambda x: float(x[0]))

我假设您的排序功能不起作用并且 ss 实际上等于 x1。在这两种情况下,您要做的是将函数传递给 sorted() 函数中的关键参数。

这个键应该是第一个浮动元素(因此是float(x[0])

【讨论】:

请解释一下原因。否则他会在两周内问其​​他一些关于如何使用整数的问题;) 这个真的很管用。非常感谢你:) @Netwave - 我知道它是如何工作的。 :)【参考方案2】:

一种解决方案是将子列表的第一个元素转换为float,然后使用sorted。这确实会改变您的原始子列表,但可能正是您需要的。

res = sorted(map(lambda i: [float(i[0]), i[1]], x1))

这里我们获取每个子列表并将第一个元素转换为float,同时保持第二个元素不变。


如果您希望使用itemgetter 而避免使用lambda,最简单的方法是组合函数。这在标准库中不可用,但toolz 提供了此功能:

from toolz import compose
from operator import itemgetter

res = sorted(x1, key=compose(float, itemgetter(0)))

【讨论】:

toolz 对我来说真的很新。太感谢了。我正在考虑将 float 与 itemgetter() 一起使用,但不知道我们可以提供 2 个这样的参数。 @garg,是的。但请注意,它是第 3 方库,因此不完全可移植。在我看来,组合是函数式编程的基础,至少应该在functools 中。 .......@jpp - 好的!

以上是关于如何在python中对具有浮点值的列表进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

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

在Python列表中对嵌套字典进行排序? [复制]

Python中对列表进行排序的方法都有哪些呢?

使用用户定义的函数在 Python 中对列表进行排序

对具有负值和正值的整数和浮点数列表进行排序?

如何在 python 中对 URL 进行分层排序?