我正在尝试通过python制作直方图.我从以下代码段开始:
def histogram(L):
d = {}
for x in L:
if x in d:
d[x] += 1
else:
d[x] = 1
return d
Run Code Online (Sandbox Code Playgroud)
我理解它使用字典功能来解决问题.但我对第4行感到困惑:if x in d:
d是要构造的,还没有什么,所以如果x在d中怎么样?
请记住,这if是一个for循环.
所以,当你正在寻找的第一个项目L没有什么d,但是当你到下一个项目中L,存在的东西d,所以你需要检查是否进行新桶直方图(d[x] = 1)或将项目添加到现有bin(d[x] += 1).
在Python中,我们实际上有一些快捷方式:
from collections import defaultdict
def histogram(L):
d = defaultdict(int)
for x in L:
d[x] += 1
return d
Run Code Online (Sandbox Code Playgroud)
这会自动启动每个bin d为零(int()返回什么),因此您不必检查bin是否存在.在Python 2.7或更高版本上:
from collections import Counter
d = Counter(L)
Run Code Online (Sandbox Code Playgroud)
将自动映射每个项目的频率L.无需其他代码.