如何解决为什么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)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。