如何在python中左移位数组

如何在python中左移位数组,python,des,Python,Des,我有一个名为c0的位数组,包含28位 bitarray('1111011111111111111111110001') 如何将该位数组左移多次,即一次左移、两次左移等。? 现在左一班就可以了 注意:这与软件包有关。您可以使用切片: def leftshift(ba, count): return ba[count:] + (bitarray('0') * count) def rightshift(ba, count): return (bitarray('0') * cou

我有一个名为
c0
的位数组,包含28位

bitarray('1111011111111111111111110001')
如何将该位数组左移多次,即一次左移、两次左移等。? 现在左一班就可以了

注意:这与软件包有关。

您可以使用切片:

def leftshift(ba, count):
    return ba[count:] + (bitarray('0') * count)

def rightshift(ba, count):
    return (bitarray('0') * count) + ba[:-count]
它们保持输入的位宽度,一端丢弃位,另一端填充
0

您可以创建自己的
位数组
类型的子类:

class mybitarray(bitarray):
    def __lshift__(self, count):
        return self[count:] + type(self)('0') * count
    def __rshift__(self, count):
        return type(self)('0') * count + self[:-count]
    def __repr__(self):
        return "{}('{}')".format(type(self).__name__, self.to01())
演示:

>c0=mybitarray(c0)
>>>c0
mybitarray('1111011111111111110001')
>>>c0>>c0>>4
mybitarray('000011101111111111111')

您也可以将作者插入。

是移位运算符(bitarray类应该重写
\uuuuuIlshift\uuuuIlshift\uIrshift\uIr
\uIrshift\uIr
方法。

标准Python中没有
bitarray
。您使用的是同名的吗?
是移位运算符吗(bitarray类应覆盖
\uuuuuuIlshift\uuuuuu
\uuuuuuIrshift\uuuuuu
methods@SimeonVisser:@SimeonVisser:是的,它是位数组。你能给我一个示例中只实现一个左移位的代码吗?这是一个用C编写的第三方库。@MartijnPieters用C编写的第三方库可以很好地重载操作重载的C语法是不同的,但是结果对象应该有一个
\uuu rshift\uuu
属性,例如,所以这个技术性只对扩展模块的编写者重要。唯一缺少的是断言(或者更好的是,引用)确实如此。有一些python的bitarray类在四处游荡。一些是纯python并实现了移位,其他的则没有。需要了解更多。@delnan:更正,它没有。@MartijnPieters然后抱怨这一点,而不是抱怨它是第三方并用C编写的;-)所有假设OP都使用我们假设的包,而不是Mike McMahon假设的包。
>>> c0 = mybitarray(c0)
>>> c0
mybitarray('1111011111111111111111110001')
>>> c0 << 4
mybitarray('0111111111111111111100010000')
>>> c0 >> 4
mybitarray('0000111101111111111111111111')