问题描述
我写了一个简单的脚本
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)]