在Python中,局部变量可能在赋值之前被引用
我正在学习一些实现决策树学习器的代码。 代码如下:在Python中,局部变量可能在赋值之前被引用,python,Python,我正在学习一些实现决策树学习器的代码。 代码如下: def calculate_entropy(self, tags): tags_counter = Counter() if len(tags) > 0: for tag in tags: tags_counter[tag] += 1 classes_probs = [float(tags_counter[tag]) / len(tags) for tag
def calculate_entropy(self, tags):
tags_counter = Counter()
if len(tags) > 0:
for tag in tags:
tags_counter[tag] += 1
classes_probs = [float(tags_counter[tag]) / len(tags) for tag in tags_counter]
entropy = 0
for prob in classes_probs:
if prob == 0:
return 0
entropy -= prob * math.log(prob, 2)
return entropy
else:
return 0
我的问题是:
classes\u probs
此时可能未定义。如果tags
为空,则不执行第一个循环。您可以通过在第一个循环之前分配一个空列表来“修复”此问题
(2) 这称为
列表理解
。使用该搜索词,在您喜欢的写作水平和示例中查找教程。您没有包含所有内容来重现您面临的问题。编辑文章,包括你面临的错误、输入值和预期输出。对于第二个问题,这是一个列表理解。顺便说一句,我们通常需要一个答案。当我投票结束这个问题时,我无意中发现了你的问题点。你能告诉我在这种情况下,与列表理解相当的“常规”是什么吗?再说一遍,“使用那个搜索词”。堆栈溢出不是用来取代现有的教程和个人研究。我很抱歉:-)[float(tags\u counter[tag])/len(tags)for tags in tags\u counter]
可以“定期”编写为:l=[]
for tags in tags\u counter:
l.append(float(tags\u counter[tag])/len(tags))