Python で 32個の１次元配列全体を ビットシフトさせたい。


お世話になります。

【 使用言語 】

Python3

【 したいこと 】

今、Byte（8bit）長の配列（リスト）変数 a[32] の  
32Byte全体分 を 256bit列 と考えた場合、  
このビット列全体を Right Shift させたいのですが、  
どうようにすればできるのでしょうか？

Python または numpy または scipy で  
一発変換できる関数が存在するのでしょうか？

宜しくお願い致します。




以下は 5 ビット右シフトする例です。バイト列を 256 ビット長の整数値に変換してシフトした後、8 ビット単位で整数値に戻しています。

[code]

    >>> import re
    
    >>> lst = list(iter(b'@12 Hello World, Good bye World.'))
    >>> lst
    [64, 49, 50, ..., 108, 100, 46]
    >>> len(lst)
    32
    
    >>> list(map(lambda x: int(x, 2),
         re.findall('.{8}',
           format(sum([int(x)*(2**(8*(len(lst)-i-1))) for i, x in enumerate(lst)])>>5, '0256b')
         )))
    [2, 1, 137, ..., 147, 99, 33]
    
[/code]

これでは分かりにくいかと思いますので、例えば 32 ビット(4 バイト)右シフトしてみます。

[code]

    >>> shifted = list(map(lambda x: int(x, 2),
         re.findall('.{8}',
           format(sum([int(x)*(2**(8*(len(lst)-i-1))) for i, x in enumerate(lst)])>>32, '0256b')
         )))
    
    >>> str(''.join(map(chr, shifted)))
    '\x00\x00\x00\x00@12 Hello World, Good bye Wo'
    
[/code]

