2016-08-22 10 views
2

ここでは、私が学生を教えている間に発見したPythonの奇妙なことがあります。負のインデックスを使用してPythonの文字列全体にアクセスする

負のインデックス作成が正しく機能するはずですが、文字列m = 'string'の場合、次の手順を実行しました。

>>> m='string' 
>>> m[:-1] 
'strin' 
>>> m[:0] 
'' 
>>> m[-1] 
'g' 
>>> m[0:] 
'string' 
>>> m[:-1] 
'strin' 
>>> m[:0] 
'' 
>>> 

負のインデックスを使用して文字列全体にアクセスする方法を知りたいですか?

+3

できません。 'm [-0:]'または 'm [-len(m):]'が数えられない限り。 –

+3

しかし、なぜですか?これは何のために作られた負の指標ではない。 – DeepSpace

+0

'm [:: - 1]'は常に楽しいデモです。 "リストに' reverse() 'メソッドがありますが、文字列はなぜですか?リスト上のこのスライスと' reverse() 'の違いは何ですか? – cdarke

答えて

7
>>> m='string' 
>>> m[-len(m):] 
'string' 

正のインデックスが文字列の先頭から数えているように、負のインデックスは最後から数えています。したがって、len(m)で数えて、mの先頭に戻る必要があります。

+0

'n = m [-len(m):]'次に: 'nはmです。 – cdarke

0

私はあなたが実際に誰かから提案されたような答えを意味しないと思っています。 0に等しく、m[:0]は、当然のことながら、空の文字列を返す必要がありますので、-0 Nは、ゼロでない限り、あなたが知りたいことは、なぜm[:-N]戻り、最後のNを除くメートル内のすべての文字です。

残念ながら、これは言語の克服できない奇抜です。

対処方法として、m[:None]またはm[:(None if N==0 else -N)]を提供します。

関連する問題