pythonのスライス操作について
#python
纏めようと思ったら半年ぐらい経過していたので流石に記事を書きます
スライスとはシーケンス(リスト、文字列、タプル、バイト列等)の一部分を切り取ってコピーを返すこと
基本的に使用するときは:を使って
例)
code:python
s="python"
print(s3)
#"h"
print(s2:5)
#"tho"
始点と終点のインデクスを、コロンを挟む形で指定する。
始点、終点は省略することが可能になっている。
例)
code:python
s="Python"
print(s:5)
#Pytho
print(s2:)
#thon
#これはミュータブル(変更可能)なシーケンスのコピーを取る簡潔な方法
print(s:)
#Python
上記で軽く触れてあるが、pythonでのコピーはcopyモジュールを使用できる。
しかし、スライスを使うともっと楽に実装出来る。
code:python
a = 1, 2, 3, 4, 5
b = a: # 終点始点を指定してすべてをスライスで取得(結果コピーと同じ)
b0 *= 10 # bはaのコピーなのでaには影響がない.
print(a)
#1, 2, 3, 4, 5
print(b)
#10, 2, 3, 4, 5
ただし多重リストをこの方法でコピーした場合,単純なシャローコピーになるので思わぬ副作用が出てBugになってしまうことがある.
解決する手段に関してはシャローコピーとディープコピーも参照
インデックスには負数の指定することも出来る。
https://gyazo.com/4d8f9f95b7c15627506dd85351242077
code:python
s = 'Python'
print(s-2:)
#"on"
スライスでは以下のようにステップを指定することも可能。
例)
code:python
s=0,1,2,3,4,5,6,7,8,9,10
even=s::2#偶数
odd=s1::2#奇数
print(even)
#0,2,4,6,8,10
print(odd)
#1,3,5,7,9
#文字列の反転
s="Python"
print(s::-1)
#nohtyP
最後の例はステップで負数を指定する方法
参考サイト
https://qiita.com/tanuk1647/items/276d2be36f5abb8ea52e