我目前正在进行一项任务,我必须分析一个pickle文件,这个文件基本上是一个巨大的列表列表(36,600个列表,每个列表都列出了波士顿,芝加哥,洛杉矶特定日期的温度,达拉斯或丹佛)。
列表'格式是:
[city, month, day, year, temperature (on this specific date) ]
所以在导入pickle并打开这个文件后,我做了:
import pickle
weather_file = open("Weather Data.pkl","rb")
obj1 = pickle.load(weather_file)
import statistics
例如,obj [30000]会打印:
['Los Angeles', 11, 27, 1996, 65.8]
然后我做了
LA_temp = list()
for D in obj1:
if D[0] == "Los Angeles" and D[1] == 1 and D[3] == 2014:
LA_temp.append(D[4])
LA_temp成为一个包含31个要素的清单,这些要素是2014年1月31天的温度。
55.6, 60.7, 57.2, 56.4, 59.1, 63.5, 61.1, 57.2, 56.2, 56.3, 57.4, 57.9, 62.7, 66.2, 67.8, 68.6, 69.5, 65.9, 61.2, 60.7, 61.8, 63.0, 57.7, 61.9, 63.9, 59.9, 60.6, 57.6, 57.4, 56.1, 58.7]
但是,我决定将此代码放在一个函数中:
def LA_monthly_temp (month):
LA_temp = list()
for D in obj1:
if D[0] == "Los Angeles" and D[1] == month and D[3] == 2014:
LA_temp.append(D[4])
return (statistics.mean(LA_temp))
理想情况下,此功能应返回2014年1月洛杉矶的温度平均值。但是,此功能仅将2014年1月第一天的温度添加到列表中,然后停止。
具体地
LA_monthly_temp(1)
会产生" 55.6"而不是" 60.7"这是正确的答案。
为什么我的函数只运行一次,即使我的代码完全相同?
答案 0 :(得分:4)
return
语句的缩进是错误的。
它需要以与for D in obj1:
def LA_monthly_temp (month):
LA_temp = list()
for D in obj1:
if D[0] == "Los Angeles" and D[1] == month and D[3] == 2014:
LA_temp.append(D[4])
return (statistics.mean(LA_temp))
这样,return
发生在整个循环之后。在您的情况下,return
在读取第一个项目后发生。