pythonスライス詳細

3256 ワード

まず、原理的にスライス演算を分析します.
listのスライス、内部は呼び出し_getitem__,__setitem__,__delitem__とslice関数です.slice関数はrange()関数に関連しています.
スライスに渡されるキーは特殊なsliceオブジェクトです.このオブジェクトには、要求されたスライス方位を記述できる属性があります.たとえば、次のようになります.
1
2
3
4 a = [ 1 , 2 , 3 , 4 , 5 , 6 ] x = a [ 1 : 5 ] #  x = a.__getitem__( slice ( 1 , 5 , None ) ) a [ 1 : 3 ] = [ 10 , 11 , 12 ]#  a.__setitem__( slice ( 1 , 3 , None ), [ 10 , 11 , 12 ] ) del a [ 1 : 4 ]#  a.__delitem__( slice ( 1 , 4 , None ) )
Pythonのスライス機能は、実際には多くのプログラマーが考えているよりも強力です.
1 a = m [ 0 : 100 : 10 #  ( =10)
注意:ステップ値はstep
Step>0の場合
スライスはstart(startを含む)から始まり、end(endを含まない)まで終了し、**は左から右へ**し、(step-1)(インデックス間の差はstepであるが、間隔の要素はstep-1)個の要素ごとに切り取る.
この場合、startが指す位置はendが指す位置の左側にあるはずです.そうしないと、戻り値が空になります.
Step<0の場合
スライスはstart(startを含む)から始まり、end(endを含まない)で終わり、**は右から左へ**し、(step-1)(インデックス間の差はstepであるが、間隔の要素はstep-1)個の要素ごとに切り取られる.
この場合、startが指す位置はendが指す位置の右側にあるはずです.そうしないと、戻り値が空になります.
古典的な応用は、文字列を反転することです.
例:
1
2 >>> str = 'pythontab.com' >>> str [:: - 1 ]
結果:
'moc.batnohtyp'
スライス境界の問題
例:
1
2
3
4
5
6 s = [ 1 , 2 , 3 , 4 ]       # S 0 4 s[ - 100 : 100 ]       # [1,2,3,4] -100 ,100 : s[0:4] s[ - 100 : - 200 ]      # [] -100,-200 , : s[0:0] s[ 100 : 200 ]        # [] 100,200 , : s[4:4] s[: 100 ]           # [1,2,3,4] 0 s[ 0 :]             # [1,2,3,4]
注意:私が使用しているpythonバージョンはpython 2です.7,pythonのスライスにバージョン互換性の問題がある.python 3にはより高度な機能と使い方があり、使用時には必ず自分のpythonバージョンに注意してください.