2012-06-06 9 views
7

Python 3を7日間で学んだことがあります。バイト文字列の理解にはちょっとした穴があるような気がします。 Python 3では、バイト文字列b'1234'があるとします。そのイテレータは、整数を返します。Python 3 bytes.index:より良い方法ですか?

Python 3.2.3 (default, May 26 2012, 18:49:27) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 

>>> for z in b'1234': 
... print(type(z)) 
... 
<class 'int'> 
<class 'int'> 
<class 'int'> 
<class 'int'> 

私はバイト文字列(inの定義は、それは平等を検索することである)の整数を見つけることができます。

>>> 0x32 in b'1234' 
True 

をしかし、私はインデックスを見つけたいですバイト文字列中の与えられた整数の値。私はPythonは、よりエレガントである知っている

>>> x = 0x32 
>>> b'1234'.index(bytes([x])) 
1 

:私は、私が見つけたい、その変数xを持っている場合、これは私が作ってみた最高です、今

>>> b'1234'.index(b'2') 
1 

bytes.indexは、サブストリングを必要としそれよりも。私は明らかに何かを明らかに欠いている。単一の整数のシーケンスを作成する以外の簡単な方法は?それとも本当ですか?

+1

さらに、なぜバイトのインデックスを探したいのですか? – pepr

+0

あなたが知っている必要がある場合:)仮想マシンの一部です。命令の1つに、見つかったバイトのインデックスが必要です。そのエンジンに基づいてZorkや他のテキストの冒険をするために使用されるZ-machine仕様のバージョン3を実装しています。チェックアウトしたい場合は、http://code.google.com/p/pyzmachineにあります。それは私の最初の努力なので、改善のポイントは高く評価されます。 –

答えて

5

はい、そうです。

それは、そのコードポイントに基づいて、文字列内の文字を検索するために多くの異なった方法からではありません。

x = 0x32 
i ='1234'.index(chr(x)) 
+0

興味深い - 私はchr()が文字列を作成したことを認識していませんでした。実際には、文字列の要素型の1つのインスタンスを表す唯一の方法は文字列であるようです。 –

+0

@RobertB:はい。 Pythonはchar型を知らない。キャラクター(他の言語とは異なります)は技術的には長さ1の文字列のみです。 – pepr

0

また、Pythonの3、章4. Stringsの中へマーク・ピルグリムのダイブを見て、セクション4.6. Strings vs. Bytes。古いPython 2.xの文字列(Python 3ではバイトとなりました)の問題と、新しいPython 3 の文字列の原則とはどう違うのですか?