Pythonのスライスの使い方がわからない…
スライスはシーケンス型オブジェクトに対して有効で、要素を指定することで一部の文字列を取得できます。今回は、リストや文字列から一部を取り出す操作スライスついて解説します。
この記事では、スライスの基本から応用的な使い方について紹介していきます。
- スライスとは?シーケンス型とは?
- スライスの基本的な使い方
- スライスの中でのステップの使い方
- 後ろからスライスをする方法
スライスについてやさしく解説していますので、ぜひ参考にしてください。
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
Pythonのスライスとは
スライスは、シーケンス型オブジェクトの要素の範囲を指定して、新しくオブジェクトを作ることが出来る機能です。
ここでシーケンス型のオブジェクトとは何かについて、知っておきましょう。シーケンス型とは、リストや文字列のようにデータを順番に処理するためのデータ構造です。
このシーケンス型は順序があるというのが一つの特徴です。また以降のサンプルコードでは主にリストを使っていますが、文字列などのシーケンス型にも使うことが出来ます。
スライスの使い方4つのパターン
ここからは実際にスライスを使ってみましょう。
スライスの基本
スライスの基本的な構文は、このようになっています。
list[最初のインデックス:最後のインデックス]
では早速スライスをしてみましょう。
sample = ['a','b','c','d','e','f','g'] print(sample[1:4]) # 1番目から4番目まで print(sample[:4]) # 最初のインデックスを省略すると0番目から print(sample[3:]) # 最後のインデックスを省略すると最後まで print(sample[:-2]) # 負の数を指定するとシーケンスの末尾から数える
実行結果
['b', 'c', 'd'] # 1番目から4番目まで ['a', 'b', 'c', 'd'] # 最初のインデックスを省略すると0番目から ['d', 'e', 'f', 'g'] # 最後のインデックスを省略すると最後まで ['a', 'b', 'c', 'd', 'e'] # 負の数を指定するとシーケンスの末尾から数える
スライスの基本的な構文と、そのルールさえしっかり理解できればとても直感的に使うことが出来ますね。
気をつけるところは2点あります。
- インデックスは0から数える。
- 最後のインデックスで指定した数から1引いた数までスライスされる。
文字列からの抜き出し、切り出しも簡単に出来ます。
こちらのサンプルコードを見てみましょう。
fruits = "apple,orange,banana" print(fruits[0:5]) # インデックスの0〜4まで抜き出し print(fruits[6:12]) # インデックスの6〜11まで抜き出し print(fruits[13:22]) # インデックスの13〜21まで抜き出し
実行結果
apple # インデックスの0〜4まで抜き出し orange # インデックスの6〜11まで抜き出し banana # インデックスの13〜21まで抜き出し
インデックスを適切に渡せば、文字列の途中でも簡単に抜き出すことが出来ます。
シーケンス型は最初の要素と最後の要素にしか触ることが出来ないと思われがちですが、スライスを使えば簡単に間の要素を取り出すことが出来ます。
ステップを指定する方法
上記で紹介したスライスは最初と最後のインデックスだけを指定していました。
ここで、インデックス以外にもステップを指定したスライスの方法について見ていきましょう。ステップを指定すると、要素を1つおき、2つおきになどの指定をすることが出来ます。
基本的な構文はこのようになります。
list[最初のインデックス:最後のインデックス:ステップ]
これまでのスライスと同じように使うことが出来ますね。
いくつかサンプルコードを見てみましょう。
mylist = ['a','b','c','d','e','f','g'] print(mylist[::2]) # 最初から最後までを2つおきに print(mylist[1:6:3]) # インデックス1からインデックス5まで3つおきに
実行結果
['a', 'c', 'e', 'g'] # 最初から最後までを2つおきに ['b', 'e'] # インデックス1からインデックス5まで3つおきに
とても簡単ですね。
さらにこのステップを応用した方法を次の章で解説します。
スライスで逆順にする方法
先程の章ではスライスでステップを使う方法を解説しました。今回はこのスライスを使って逆順に要素を取り出してみましょう。
こちらのサンプルコードをご覧ください。
mylist = ['a','b','c','d','e','f','g'] print(mylist[::-1]) # ステップをマイナス1にして逆順に要素を取り出す
実行結果
['g', 'f', 'e', 'd', 'c', 'b', 'a'] # ステップをマイナス1にして逆順に要素を取り出す
スライスのステップを使うと、とても簡単にリバースすることが出来ましたね。
多次元配列に対するスライス
少し発展的な内容に触れてみましょう!
numpyというPythonの行列計算ライブラリには、配列(np.array)型があります。この配列へのアクセスの方法は基本的にリストと同じです。
ですが多次元配列(配列の中に配列が入っているもの)の場合は少し異なります。ここでは多次元配列に対するスライスの仕方を紹介します。
import numpy as np X = np.array([[1,2,3],[10,11,12],[13,14,15]]) print(X[:,1]) # 全ての配列の1番目の要素にアクセス print(X[2,:]) # 2番目の配列のすべての要素にアクセス == X[2] print(X[:2,1:]) # 1番目までの配列の1番目以降の要素にアクセス
実行結果
[ 2 11 14] # 全ての配列の1番目の要素にアクセス [13 14 15] # 2番目の配列のすべての要素にアクセス == X[2] [[ 2 3] [11 12]] # 1番目までの配列の1番目以降の要素にアクセス
多次元配列へのアクセスも、スライスを使うとかっこよくできますね。
まとめ
今回はPythonのスライスについて解説してきました。
スライスの基本的な構文とマイナスを指定した場合の挙動、リバースをする方法についておさえておきましょう。
スライスを使うことが出来るとシーケンス型の扱いがとても楽に、便利になります。
みなさんもぜひ、スライスを使ってみてください。