是否可以在lambda函数中创建多个语句?

时间:2019-11-20 08:21:47

标签: python python-3.x

我们的任务是创建一个lambda函数,用于按第一个十进制数字的值对浮点数列表进行排序。相同的第一个十进制数字的元素必须按升序排序。

例如:

l = [45.2133, 80.7795, 2.3048, 50.2441, 16.1436, 53.6323, 21.742, 15.9621, 46.0865, 58.7235]
l.sort(key=f1)
print(l)

输出必须为

[46.0865, 16.1436, 45.2133, 50.2441, 2.3048, 53.6323, 21.742, 58.7235, 80.7795, 15.9621]

我尝试了以下lambda函数:

f1 = lambda x: x - int(x)

但是,它不会以递增的顺序对具有相同的第一个十进制数字的数字进行排序,并且我们不能仅使用模块来使用函数。

3 个答案:

答案 0 :(得分:2)

您可以使用以下lambda作为sort的键:

lambda x: (int(str(x).split('.')[1][0]), x)

代码

l = [45.2133, 80.7795, 2.3048, 50.2441, 16.1436, 53.6323, 21.742, 15.9621, 46.0865, 58.7235]

l.sort(key=lambda x: (int(str(x).split('.')[1][0]), x))
print(l)

# [46.0865, 16.1436, 45.2133, 50.2441, 2.3048, 53.6323, 21.742, 58.7235, 80.7795, 15.9621]

按第一个十进制数字排序,如果出现平局,则按值排序。

答案 1 :(得分:0)

这将解决您的问题,而无需转换X的类型。

l = [45.2133, 80.7795, 2.3048, 50.2441, 16.1436, 53.6323, 21.742, 15.9621, 46.0865, 58.7235]

l.sort(key=lambda x: ((x % 1), x))
print(l)

答案 2 :(得分:0)

from math import floor

f1 = lambda x: (math.floor((x - math.floor(x)) * 10),x)

向我的一个朋友提供计算建议。