我正在尝试通过 python 制作直方图。我从以下片段开始:
def histogram(L):
d = {}
for x in L:
if x in d:
d[x] += 1
else:
d[x] = 1
return d
我理解是用字典函数来解决问题。 但我只是对第 4 行感到困惑:if x in d:
d要构造了,d里面什么都没有,x在d里怎么会呢?
请您参考如下方法:
请记住,if 位于 for 循环中。
因此,当您查看 L 中的第一项时,d 中没有任何内容,但是当您看到 L 中的下一项时,d中有的东西,所以需要检查是否在直方图上做一个新的bin(d[x] = 1),或将项目添加到现有容器中 (d[x] += 1)。
在 Python 中,我们实际上有一些快捷方式:
from collections import defaultdict
def histogram(L):
d = defaultdict(int)
for x in L:
d[x] += 1
return d
这会自动将 d 中的每个 bin 设为零(int() 返回的内容),因此您不必检查 bin 是否存在。在 Python 2.7 或更高版本上:
from collections import Counter
d = Counter(L)
将自动对 L 中每个项目的频率进行映射。不需要其他代码。
