我从一本书中读到了以下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
答案 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