gpt4 book ai didi

Python 位数组集

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:29 25 4
gpt4 key购买 nike

生成一组类似位数组的对象的最佳方法是什么,以便我可以有效地测试成员资格。天真的方式似乎并没有像我预期的那样工作:

>>> from bitarray import bitarray
>>>
>>> bitarray_set = set([bitarray('0000'), bitarray('0001')])
>>> bitarray_set
set([bitarray('0001'), bitarray('0000')])
>>>
>>> bitarray('0000') in bitarray_set
False

解决方法是保留一组单独的字符串或其他更友好的对象作为键。然后将位数组转换为字符串并改为针对该集合测试成员资格。但这似乎有点麻烦。有更好的解决方案吗?

最佳答案

bitarray 似乎没有保持散列不变量:

>>> x = bitarray(b'0000')
>>> y = bitarray(b'0000')
>>> x == y
True
>>> hash(x) == hash(y)
False

这违反了 __hash__ 的 API,如 documented :

The only required property is that objects which compare equal have the same hash value

这意味着位数组实际上是不可散列的,并且不能在集合中或作为字典键可靠地工作。

我认为这是位数组库中的错误。我以前从未听说过 bitarray,而且它似乎没有太多文档。据我所知,它甚至没有说明应该如何为位数组定义相等性,也没有说明它们是否应该是可散列的,但它似乎以不兼容的方式实现了相等性和散列。

关于Python 位数组集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com