<>昨天,我回答了一个新问题,关于如何处理Python中的位——与C++相比。在警告不会有速度提升之后,我使用Python内部的bytearray对象绘制了一个简单的“bitarray”。在</p>
<p>这一点也不快,但是如果您不再对数组位进行操作,而只需要输出,也许就足够了,因为您可以完全控制Python代码中的转换。否则,您可以尝试只提示静态类型并运行与Cython相同的代码,您可能希望使用dtype=int8的np数组而不是bytearray:</p>
<pre><code>class BitArray(object):
def __init__(self, length):
self.values = bytearray(b"\x00" * (length // 8 + (1 if length % 8 else 0)))
self.length = length
def __setitem__(self, index, value):
value = int(bool(value)) << (7 - index % 8)
mask = 0xff ^ (7 - index % 8)
self.values[index // 8] &= mask
self.values[index // 8] |= value
def __getitem__(self, index):
mask = 1 << (7 - index % 8)
return bool(self.values[index // 8] & mask)
def __len__(self):
return self.length
def __repr__(self):
return "<{}>".format(", ".join("{:d}".format(value) for value in self))
</code></pre>
<p>此代码最初发布在此处:<a href="https://stackoverflow.com/questions/34496234/is-there-a-builtin-bitset-in-python-thats-similar-to-the-stdbitset-from-c/34496589#34496589">Is there a builtin bitset in Python that's similar to the std::bitset from C++?</a></p>