スライスってなに?
Pythonをある程度触っていると、スライスという言葉を目にするかとは思いますが、よく使うから理解できていると思いきや、実は結構複雑なものだったので、記事にしてみました。
スライスとは、シーケンスの要素について部分的に簡単にアクセスできる構文(?)です。
スライス演算は、listやstrなどのよく使う型で利用できるので、スライスを知っておくとかなり便利なものになります。
基本の使い方
a[始まりの位置: 終わりの位置]みたいに使います。
たとえば、
a = [1, 2, 3, 4, 5]
print(a[0: 4])
print(a[: 4])
print(a[-3:])
print(a[2: -1])
>>>
[1, 2, 3, 4]
[1, 2, 3, 4]
[3, 4, 5]
[3, 4]
こういう感じです。始まりの位置に何も入力しないと0、終わりの位置に何も入力しないと末尾として処理されるので、そういうときは書かない方がいいです。
マイナスが入ると少しわかりにくいかもですが、これを用いるとリストと末尾についての指定が簡単にできるので使い慣れると世界が変わると思います(ちょっと大げさな言い方ですかね)。
ここまでは私も知っていたスライスなんですが、実はこれよりも複雑な書き方が存在したのです……!
最近勉強したスライスのやり方
a[始まりの位置: 終わりの位置: スライスの増分]です。
スライスの増分を指定することで、「n番目ごとに要素を得る」こととかができます。
たとえば、
a = [1, 2, 3, 4, 5]
print(a[:: 2])
print(a[1:: 2])
print(a[::-1])
print(a[1::-1])
>>>
[1, 3, 5]
[2, 4]
[5, 4, 3, 2, 1]
[2, 1]
です。こういうことです。
複雑だけど、これ使いこなせたらかなり良さげですよね!
特に-1とかかなり使えそう。
ただこれ、3つを組み合わせるとちょっと理解するのに時間かかりますね多分。
前に作ったプログラムを見直したときに、「あれ? これどうなるんだっけ?」ってなるやつです。
可読性を考えたらいいのかどうかわかりませんが、知っておいて損はないとおもいます。
そんなわけで、スライスも奥が深いなーという話でした。