2017-10-10 3 views
-1

この質問は既に で検索されていますが、このステートメントはどのようにPythonで有効ですか?Python:どのようにstringと一緒に動作するのですか? 'spam' [1:3]これはどのように機能しますか?

>>> 'spam'[1:3] 
>>> 'pa' 

質問は、どのようにスライスがstrタイプに関連付けられているかです。それは「スパム」との平凡なつながりですか?

おかげ --Div

+0

これは文字列とリストではなく、スライス表記の文字列で、インデックス '1'から始まりインデックス '3'より前に終了する文字列 '' spam 'の一部を取ります。 –

答えて

1

strタイプは、__getslice__メソッド(Python 2)と__getitem__メソッド(Python 2と3の両方)を持っているためです。

dir('spam')が表示されます。

また、あなたがより多くの詳細についてはhttps://docs.python.org/2/reference/datamodel.html#object.getsliceを参照することができます3.

pythonでのpython 2または'spam'.__getitem__(slice(1,3))'spam'.__getslice__(1,3)を試してみてください。

+0

完璧、情報ありがとう。 – user3069970

2

スライスは、オブジェクトのコピーを作成し、スライスがどのように機能するかを覚えておくべき

一つの方法は、最初の文字の左端で、文字の間を指して指標を考えることです文字列内の6 ...

+---+---+---+---+---+---+ 
| P | y | t | h | o | n | 
+---+---+---+---+---+---+ 
0 1 2 3 4 5 6 
-6 -5 -4 -3 -2 -1 

番号の最初の行は、インデックス0の位置を与える。:0の番号が付けN個の文字列の最後の文字の右端は、例えば率nを有しています2番目の行は対応する負のインデックスを返します。 iからjまでのスライスは、それぞれiとjとラベル付けされたエッジ間のすべての文字で構成されます。あなたのケースでは

+---+---+---+---+ 
| s | p | a | m | 
+---+---+---+---+ 
0 1 2 3 4 
-4 -3 -2 -1 

>>> 'spam'[1:3] 
'pa' 
1

このことができます場合は通常の配列のような文字列を考えます。例えば

0 1 2 3 
s p a m 

のでspam[1:3]あなたは、単に(自分自身の長さ1の文字列である)文字の不変のリストのような文字列を考慮することができるpa

0

つまり、文字列の位置[1, 3)の内容を提供します:

>>> list('spam') 
['s', 'p', 'a', 'm'] 
>>> sorted('spam') 
['a', 'm', 'p', 's'] 
>>> [c * 2 for c in 'spam'] 
['ss', 'pp', 'aa', 'mm'] 

それは割り当てが動作しないことを意味するが、スライスがリストの場合と全く同じである:

>>> 'spam'[1:3] 
'pa' 
>>> list('spam')[1:3] 
['p', 'a'] 
関連する問題