为什么我的列表不能正确保存(python)
问题描述:
当我分别打印每个项目(请参阅下面的注释)时,它们会正确显示。但是,当我试图用字典填充列表时,它就显示为空!任何人都可以找出原因吗?为什么我的列表不能正确保存(python)
def getAnnualSnow(allData):
annualSnow = []
year = allData[0]['year']
totalSnow = 0
for monthData in allData:
if year <= 2012:
if monthData['year'] == year:
totalSnow = totalSnow + monthData['snow']
else:
totalAnnSnow = {'year':year, 'totalsnow':round(totalSnow,1)}
#print(totalAnnSnow)
annualSnow.append(totalAnnSnow)
year = year + 1
totalSnow = 0
else:
return annualSnow
答
如果列表为空,也许不会返回? 我只改变了最后一个。
if year <= 2012:
if monthData['year'] == year:
totalSnow = totalSnow + monthData['snow']
else:
totalAnnSnow = {'year':year, 'totalsnow':round(totalSnow,1)}
#print(totalAnnSnow)
annualSnow.append(totalAnnSnow)
year = year + 1
totalSnow = 0
if year > 2012 and annualSnow:
return annualSnow
答
好的。所以我认为是什么导致你的困惑是函数不返回任何东西(无?)。看看下面修改过的else部分,我只添加了一个return语句。
def getAnnualSnow(allData):
annualSnow = []
year = allData[0]['year']
totalSnow = 0
for monthData in allData:
if year <= 2012:
if monthData['year'] == year:
totalSnow = totalSnow + monthData['snow']
else:
totalAnnSnow = {'year':year, 'totalsnow':round(totalSnow,1)}
#print(totalAnnSnow)
annualSnow.append(totalAnnSnow)
year = year + 1
totalSnow = 0
else:
return annualSnow
# return annualSnow here!!
return annualSnow
事情取决于你想做什么,你可以到处分支。当year >2012
时,通过返回annualSnow来短路,但除此之外,您不会从该函数返回任何值。而且因为你不打印任何东西,你什么都看不到。
尝试做:
x = getAnnualSnow(allData)
print x
type(x)
鉴于您的片段,好像你的输出应该是None
(但我没有数据证明)。
编辑
具有的片段更仔细地看了看,这似乎是一个问题
year = allData[0]['year']
你可能想要做什么是
year = monthData['year']
只是做if year <= 2012
比较之前。因为就目前而言,你总是比较2012年的第一个入围年份,所以你的代码段是否返回值取决于这一事实。它永远不会进入'主'else
部分,如果它曾经进入'主'if
。 (听起来令人费解,因为我再读一遍,希望很清楚)
因为可能是你的其他部分没有执行 –
你能简单解释一下allData中的数据是什么吗?从代码中很难理解它。 – Tim
而您的其他部分是*正在执行 - 两个调用的数据是否相同? – zEro