God*_*del 1 python set bitarray
生成一组类似bitarray的对象的最佳方法是什么,以便我可以有效地测试成员资格.天真的方式似乎没有像我期望的那样起作用:
>>> from bitarray import bitarray
>>>
>>> bitarray_set = set([bitarray('0000'), bitarray('0001')])
>>> bitarray_set
set([bitarray('0001'), bitarray('0000')])
>>>
>>> bitarray('0000') in bitarray_set
False
Run Code Online (Sandbox Code Playgroud)
解决方法是将一组单独的字符串或其他更友好的对象保存为键.然后将bitarray转换为字符串并测试该集合的成员资格.但这似乎有点麻烦.有更好的解决方案吗?
似乎bitarray不保持哈希不变量:
>>> x = bitarray(b'0000')
>>> y = bitarray(b'0000')
>>> x == y
True
>>> hash(x) == hash(y)
False
Run Code Online (Sandbox Code Playgroud)
这是一个违规的API __hash__,如记录:
唯一需要的属性是比较相等的对象具有相同的哈希值
这意味着比特阵列实际上是不可用的,并且不能在集合中可靠地工作或作为字典键.
我认为这是bitarray库中的一个错误.我之前从未听说过bitarray,它似乎没有太多的文档.据我所知,它甚至没有说明如何为bitarray定义相等性,也不知道它们是否应该是可以清除的,但似乎它以不兼容的方式实现了相等和散列.
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |