Python 配列のスライシング #1

株式会社リュディアです。今回から Python の配列のスライシングについてまとめていきたいと思います。

もっと早い時期にまとめたかったのですが、NumPy の ndarray についてまとめた後で Python の配列のスライシングについてまとめようと思っていたので今になってしまいました。参考に NumPy の ndarray についてのまとめは以下のリンクを見てください。

では最初に言葉の定義からです。スライスあるいはスライシングとは配列のある特定の範囲を抽出する処理のことを言います。ある特定の値のみを選択することはインデクシングということが多いです。

では以下のコードを見てください。

python_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
print(python_list)

#
# ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
#

Python の標準データ型であるリスト型で英語の小文字アルファベット a ~ j を格納した python_list を定義しました。python_list を print すると配列全体が表示されます。頭の中に以下のような図を浮かべるとよいと思います。Idx の行は配列のインデクスを表現しています。

画像1

では配列 python_list をスライシングした例を見てみましょう。以下のコードを見てください。どのような表示になりそうか予測しながらすすめてください。

python_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

print(python_list[2:10])
print(python_list[2:])

#
# ['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
# ['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
#

最初は python_list[2:10] から見てみましょう。先頭はインデクス = 2 なので c になります。[2:10] はインデクス 2 ~ の要素を表示することになるので c ~ j を表示しています。問題ないですね。同じ表示をする際に python_list[2:] のように指定することも可能です。コロン : の後に数字を指定しなければ最終の要素までスライシングするようになります。以下に配列スライシングのイメージ図も入れておきますのでコードと照らし合わせながら見てください。

画像2

では次のコードを見てください。python_list[2:6] と python_list[6:2] を print しています。どのように表示されると思いますか。

python_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

print(python_list[2:6])
print(python_list[6:2])

#
# ['c', 'd', 'e', 'f']
# []
#

python_list[2:6] は想像通りだったと思います。しかし python_list[6:2] はエラーにはなりませんが空(くう)のリスト [ ] が表示されたのは想像とは違ったのではないでしょうか。Python のスライシングではステップが正の時にはコロン : の左の値が右の値より小さいことを前提としていることに注意してください。ステップについては次回にまとめます。

今回は Python の標準データ型であるリストのスライシングの特に基本部分についてまとめました。

Python 配列のスライシング に関するまとめの続きは以下からどうぞ。

では、ごきげんよう。




この記事が気に入ったらサポートをしてみませんか?