为什么lambda顺序在python中部分反转?

问题描述

我写了一个简单的脚本

numbers = (1,2,3,4)
srebmun = (4,1)
div = lambda x,y : x/y
result = map(div,numbers,srebmun)
divNum = set(result)
print(divNum)

我期望最高数字除以最低数字,所以(1 / 4,2 / 3,3 / 2,4 / 1),但我得到1 / 4,4 / 1,3 / 2({0.25,0.6666666666666666,4.0,1.5})。我缺少明显的东西吗?

解决方法

您的问题是set没有排序。您可以将结果强制转换为列表而不是集合并保留顺序,也可以使用自定义OrderedSet

,

正如已经提到的set不保留顺序,您可以按照以下方式将结果转换为元组

numbers = (1,2,3,4)
srebmun = (4,1)
div = lambda x,y : x/y
result = map(div,numbers,srebmun)
divNum = tuple(result)
print(divNum)  # (0.25,0.6666666666666666,1.5,4.0)

或在result内打开*的包装(使用print):

numbers = (1,srebmun)
print(*result)  # 0.25 0.6666666666666666 1.5 4.0

请注意,默认情况下,这会使用空格作为分隔符,如果您想使用其他内容,请使用sep关键字参数将其指定,即:

print(*result,sep=',')  # 0.25,4.0

请注意,这确实会耗尽result(您以后不能再使用它了。)

,

set没有订单。

在这种情况下,最好使用列表理解:

[x/y for x,y in zip(numbers,srebmun)]