对于以下代码,a
和c
无法比较。即使它们在逻辑上是相同的。
此处a
不等于c
,因为它们的长度不同?如何以有效的方式克服这个问题?
from bitarray import bitarray
a = bitarray('1', endian="little") * 5
b = a.tobytes()
c = bitarray(endian='little')
c.frombytes(b)
print(a == c)
答案 0 :(得分:1)
如果是来自https://pypi.python.org/pypi/bitarray/
的比特币0.8变通方法
就我检查当前的实现而言,如果它们的长度不同,则总是假设两个位阵列的内容是不同的。甚至bitdiff都是从这样的检查开始的,而人们可以假设较短的数组实际上用0-s进行扩展以进行这种比较。
编辑: 就地扩展可能是可能的。我不知道它是不是很好的Python代码,但这样的东西可能有用:
a.extend(max(0, c.length()-a.length()) * bitarray([False]))
c.extend(max(0, a.length()-c.length()) * bitarray([False]))
在我的想象中,通过运行这些行,较短的比特阵列以0-s扩展并且与另一个比特阵列具有相等的长度。在实践中,我不知道0*bitarray([False])
如何表现,现在无法测试它。
如果它行为不端,那就是传统的
if c.length()<a.length(): c.extend(a.length()-c.length()) * bitarray([False])
elif a.length()<c.length(): a.extend(c.length()-a.length()) * bitarray([False])
可以确保0*bitarray([False])
永远不会发生。