当您准备绘制直方图时,最简单的方法是不要考虑箱,而是报告每个值出现的次数(频率表)。一条蟒蛇字典非常适合这项任务:
>>>>>> # Need not be sorted, necessarily
>>> a = (0, 1, 1, 1, 2, 3, 7, 7, 23)
>>> def count_elements(seq) -> dict:
... """Tally elements from `seq`."""
... hist = {}
... for i in seq:
... hist[i] = hist.get(i, 0) + 1
... return hist
>>> counted = count_elements(a)
>>> counted
{0: 1, 1: 3, 2: 1, 3: 1, 7: 2, 23: 1}
count_elements()
返回一个字典,其中序列中的唯一元素作为键,其频率(计数)作为值。在循环内结束seq
, hist[i] = hist.get(i, 0) + 1
说:“对于序列中的每个元素,增加其对应的值hist
1。”
事实上,这正是collections.Counter
Python 标准库中的类,其中子类一个Python字典并覆盖它的.update()
方法:
>>>>>> from collections import Counter
>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
您可以确认您的手工函数实际上与collections.Counter
通过测试两者之间的相等性:
>>>>>> recounted.items() == counted.items()
True
技术细节: 映射自count_elements()
以上默认为更高度优化的C函数如果有的话。在 Python 函数内count_elements()
,您可以进行的一项微观优化是声明get = hist.get
之前for循环。这会将方法绑定到变量,以便在循环内更快地调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)