82
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonのスライスについて

Last updated at Posted at 2016-10-16

スライスってなに?

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つを組み合わせるとちょっと理解するのに時間かかりますね多分。
前に作ったプログラムを見直したときに、「あれ? これどうなるんだっけ?」ってなるやつです。

可読性を考えたらいいのかどうかわかりませんが、知っておいて損はないとおもいます。

そんなわけで、スライスも奥が深いなーという話でした。

82
65
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?