为什么我的列表没有正确保存(python)

时间:2016-06-09 07:02:49

标签: python list

当我单独打印每个项目时(请参阅下面的评论),它们会正确显示。但是,当我尝试使用词典填充列表时,它会显示为空!任何人都可以找出原因吗?

NULL

2 个答案:

答案 0 :(得分:0)

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

    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

答案 1 :(得分:0)

好。所以我认为导致你混淆的是该函数没有返回任何内容(无?)。看下面修改过的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。 (听起来很复杂,我再读一遍。我希望很清楚)