构建直方图

Loo*_*ast 1 python histogram

我正在尝试通过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中怎么样?

agf*_*agf 5

请记住,这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.无需其他代码.