为什么我的列表不能正确保存(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 
+0

因为可能是你的其他部分没有执行 –

+1

你能简单解释一下allData中的数据是什么吗?从代码中很难理解它。 – Tim

+0

而您的其他部分是*正在执行 - 两个调用的数据是否相同? – zEro

如果列表为空,也许不会返回? 我只改变了最后一个。

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。 (听起来令人费解,因为我再读一遍,希望很清楚)