使用lambda与map()做温度转换时,Celsius列表输出为空的问题求助
温度转换代码中空列表问题的原因与解决办法
核心问题是Python里的map对象是一次性迭代器:当你第一次执行list(Farhenheit)时,已经把这个map迭代器里的所有元素都遍历完了,迭代器的指针会移到末尾,之后再复用这个迭代器(比如传给第二个map),就不会再有元素返回,所以最终得到空列表。
解决方法1:提前将map结果转为列表存储(推荐)
把华氏度的map结果先转成列表保存,这样后续可以重复使用:
temp2 = [39.2, 36.5, 37.3, 37.8] # 转成列表存储,避免迭代器被耗尽 Farhenheit = list(map(lambda x: (float(9)/5) * x + 32, temp2)) print(Farhenheit) # 输出: [102.56, 97.7, 99.14, 100.03999999999999] Celsius = list(map(lambda x: (float(5)/9) * (x - 32), Farhenheit)) print(Celsius) # 输出: [39.2, 36.5, 37.3, 37.8]
解决方法2:重新生成map对象(不推荐,重复计算)
如果不想提前转列表,可以重新创建华氏度的map对象,而不是复用之前的迭代器:
temp2 = [39.2, 36.5, 37.3, 37.8] Farhenheit = map(lambda x: (float(9)/5) * x + 32, temp2) print(list(Farhenheit)) # 重新创建map对象,避免复用已耗尽的迭代器 Celsius = map(lambda x: (float(5)/9) * (x - 32), map(lambda x: (float(9)/5) * x + 32, temp2)) print(list(Celsius)) # 输出: [39.2, 36.5, 37.3, 37.8]
内容的提问来源于stack exchange,提问作者Paddy Paddy
相关产品推荐
相关产品推荐

