2017-03-07 13 views
-2

は簡単な例です:なぜPythonは文字列結合ステートメントの最初の要素をスキップしますか?ここ

In [155]: exampleArray = bytearray([0xc0, 0xff, 0x01]) 
In [156]: exampleArray 
Out[156]: bytearray(b'\xc0\xff\x01') 
In [157]: print ' 0x'.join('{:02x}'.format(x) for x in exampleArray) 
c0 0xff 0x01 

いますが、documentation of str.joinで読むことができたよう私が欲しいのは 0xc0から0xffの0x01の

+4

参加は**要素間の '」0x'' **を書き込みます。 –

+2

'print( '' exampleArrayではxのために.join( '0x {:02x}')をフォーマットしてください))' –

+0

それでした!ありがとう@ジャンフランソワファーブル!あなたが答えを出したら、私はそれに印をつけます –

答えて

0

です:

リターンを連結した文字列iterable iterableの文字列。バイトオブジェクトを含む反復可能な文字列以外の値があれば、TypeErrorが送出されます。要素間のセパレータは、このメソッドを提供する文字列です。

ので' 0x'は、文字列間置かれ区切りです。ただし簡単にこの問題を解決することができます。

print ' '.join('0x{:02x}'.format(x) for x in exampleArray)
2

str.join()のみ参加の要素間の建具を配置します。 str.join() documentationから:

要素間のセパレータは、この方法を提供する文字列です。

太字強調点)。

ではなく、スペースに参加し、0x接頭辞が含まれるようにフォーマットを変更:

' '.join('{:#04x}'.format(x) for x in exampleArray) 

#はあなたのために0x接頭語が含まれるようにフォーマットを変更します。余分な2文字を考慮に入れてフィールド幅を調整する必要があることを考慮してください(それぞれのフィールドは接頭辞0xを含む4文字を要します)。

デモ:

>>> exampleArray = bytearray([0xc0, 0xff, 0x01]) 
>>> print ' '.join('{:#04x}'.format(x) for x in exampleArray) 
0xc0 0xff 0x01