如何在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中对具有浮点值的列表进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章