如果它是從https://pypi.python.org/pypi/bitarray/
- tobytes的bitarray 0.8不保留在比特長度
- 因此frombytes總是創建長度= N * 8
的bitarray解決方法
- 最無痛的解決方法是將兩個陣列的大小擴展到8的倍數。沒有這樣的操作
- 第二個最無痛的解決方法是在比較之前在兩個陣列上運行tobytes-frombytes對。這樣,它們的長度將成爲8
- 或者多解包和包可能保持精確長度,只是他們使用1個字節來表示據1位
爲我檢查當前的實現總是假設如果它們的長度不同,則兩個比特的內容是不同的。即使bitdiff從這種檢查開始,而人們可以假設較短的陣列實際上用0-s進行擴展來進行這種比較。編號: 就地擴展可能是可能的。我不知道,如果它是很好的Python代碼或沒有,但這樣的事情可能工作:
a.extend(max(0, c.length()-a.length()) * bitarray([False]))
c.extend(max(0, a.length()-c.length()) * bitarray([False]))
在我的想象通過運行這些線路較短bitarray獲取與0-S延伸,具有長度相等的其他bitarray。在實踐中,我不知道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])
永遠不會發生。
親愛的SO,請停止詢問「最高效」方式的人。謝謝。 –
克服它如何?他們是不同的。您可能需要指定您正在嘗試完成的內容。 –
如果它們的長度不同,它們會如何相等? – martineau