如何理解python中的以下空if语句?

时间:2015-08-11 21:21:28

标签: python

我从一本书中读到了以下Python代码,这本书应该很容易理解。我只是想知道,以下空if语句的目的是什么:

if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1

完整的代码是:

from math import log
def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():
        labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob * log(prob,2)
    return shannonEnt

3 个答案:

答案 0 :(得分:3)

if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1

是错误的。它的可能严重缩进,应该是:

if currentLabel not in labelCounts.keys():
    labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1

你无法排空" Python中的if。你可以这样做:

if something:
    pass

实际上什么也没做。

答案 1 :(得分:2)

看起来你需要一个缩进,你的代码应该生成密钥,如果它不存在然后它增加该密钥的计数器,+ =不应该缩进以考虑已经存在的密钥和你的新密钥创建密钥:

if currentLabel not in labelCounts.keys():
  labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1

另一种表达方式:

if currentLabel not in labelCounts.keys():
  labelCounts[currentLabel] = 1
else:
  labelCounts[currentLabel] += 1

答案 2 :(得分:0)

第二行很可能是缩进的,如下所示:

if currentLabel not in labelCounts.keys():
    labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1

如果dict labelCounts不包含值为currentLabel

的键,则可以避免抛出错误