LoginSignup
134
117

More than 5 years have passed since last update.

Pythonのスライス

Last updated at Posted at 2017-01-02

スライス

スライスを使ってリストの要素を部分的に取得できる。

インデックス1〜3の要素を取得

>>> a = [1,2,3,4,5,6,7,8,9]

>>> a[1:4]
[2, 3, 4]

※ 終端は インデックス + 1の値となる

ステップを指定

>>> a = [1,2,3,4,5,6,7,8,9]

>>> a[1:8:2]          # インデックス1〜7の要素を2ステップで
[2, 4, 6, 8]

最後の要素にアクセス

>>> a = [1,2,3,4,5,6,7,8,9]
>>> a[-1] 
9

-1は一番後ろの要素で、-2は後ろから2番目の要素、-3は。。。(略)

>>> a[-2]
8

>>> a[-3]
7

>>> a[-4]
6

スライスではインデックスをオーバーしてもエラーにならない

>>> a = [1,2,3,4,5,6,7,8,9]

>>> a[5:20]
[6, 7, 8, 9]

>>> a[-100:4]
[1, 2, 3, 4]

一番最初から~○○まで

先頭を省略すると「一番最初」の要素を示す

>>> a[0:4]
[1, 2, 3, 4]

>>> a[:4]
[1, 2, 3, 4]

は同義

○○から~一番後ろまで

末尾を省略すると「一番最後」の要素を示す

>>> a[5:len(a)]
[6, 7, 8, 9]

>>> a[5:]
[6, 7, 8, 9]

は同義

>>> a = [1,2,3,4,5,6,7,8,9]
>>> a[-4:]
[6, 7, 8, 9]

なんてこともできる

すべての要素を指定

>>> a[0:len(a)]

>>> a[:]

または

>>> a[::]

は同義

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> a[0:len(a)]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> a[::]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

スライスされたリストは、元のリストとは別インスタンス

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> b = a[-5:]
>>> b
[5, 6, 7, 8, 9]

>>> b[1] = 60
>>> b
[5, 60, 7, 8, 9]

# 元リストはコピーしたリストとは別インスタンスなので、変更の影響を受けない
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]


マイナスのステップ

先にふれたようにスライスではステップが指定できた。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[3:8:2]  # インデックス 3〜7を2ステップで
[4, 6, 8]

以下のようにすると逆方向にスライスできる。

>>> a[7:2:-2]   # インデックス7〜3を-2ステップで
[8, 6, 4]

範囲を全指定にしてマイナスステップにすると、要素がリバースする。

>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]

文字列に対して

文字列に対しても同じく以下のように。

>>> txt = '123456789'

>>> txt[1:4]
'234'

>>> txt[-1]
'9'

>>> txt[:4]
'1234'

>>> txt[5:]
'6789'

>>> txt[::-1]
'987654321'
134
117
0

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
134
117