1

たとえば、次のように、一連の整数を単一バイト文字列のトークンのリストと連結したいと思います。

foo
bar
baz

は次のようになります (整数表現に 1 バイトを使用):

b'\x00foo'
b'\x01bar'
b'\x02baz'

私が思いついた最高のものは次のようになります。

for i, token in zip(range(256), "foo bar baz".split()):
    print(i.to_bytes(1, sys.byteorder) + token.encode())

ただし、反復自体には、ループの各ステップで Python の整数とバイト間の変換が含まれるため、単純に整数を反復するよりもはるかに遅くなります (私にとっては 10 倍)。

問題は、整数自体ではなく、整数のバイト文字列表現を直接反復処理する方法があるかどうかです。

4

3 に答える 3

2

変換を避けるために、numpy を使用してバッファ インターフェイスに直接アクセスできます。

Python 2.7 (numpy 1.7.1) では、このコード:

N = arange(256, dtype='uint8')
for i, token in enumerate("foo bar baz".split()):
    print repr(N.data[i] + token.encode())

与えます:

'\x00foo'
'\x01bar'
'\x02baz'
于 2013-07-05T17:29:54.240 に答える