我觉得我错过了一些琐碎的事情:
我最近跳转到Python3(在Eclipse中使用PyDev)。
我计算了一个项目的熵,它包含了以下代码:
data = b'NVGI\x19\x01\x10\x00'
seen = dict(((chr(x), 0) for x in range(0,256)))
for byte in data:
seen[byte]+=1
数据中的二进制字符串要长得多,但这足以用于演示目的。在
对于python3,这段代码会导致KeyError。对于python2.7,这一点都没有问题。在
这是因为迭代数据时返回一个整数(在本例中为78),而seen需要一个字符“N”。在
奇怪的是,python会产生同样的代码。在
目前,我的乐队通过以下方式来帮助我们:
^{pr2}$有人能不能试着复制这个或者告诉我哪里出错了?在
因为在python-3中,二进制字符串的元素是
int
s。在事实上:
这也是在"What's New In Python 3.0" documentation中指定的。在
因此,您可以通过构建字典来解决问题,例如:
^{pr2}$或者你可以用相反的方法来做:
^{3}$但更优雅的解决方案是使用计数器:
从而产生:
Counter
是dict
的一个子类,因此计数器支持所有字典操作。在如果您希望计数器包含
str
ing值,您可以这样做:这样可以得到:
注意,如果您在计数器中查询一个不存在的键,它将返回
0
。所以你也节省了内存,可以这么说,因为你不必对所有256个值都有计数。在相关问题 更多 >
编程相关推荐