▶ データ分析を基本から学びたい場合は以下の記事からどうぞ。
はじめに
Python初学者向けに記事を書いています。今回はシーケンス(リストや文字列、タプルなど)の一部を選択する方法を基本から解説します。シーケンスから一部を切り取って返す仕組みをスライスあるいはスライシングといいます。まずは基本を学んで、省略して表記をする場合をおさえておけばそんなに難しくありません。早速見ていきましょう。
基本的な使い方
まずは基本をおさえていきましょう。スライスでは選択範囲の開始位置(start)と終了位置(stop)をコロンを挟んで指定するのが基本です。
ここで指定したstartは含まれ、stopは含まれないことに注意してください。実際に試していきましょう。まずは動物たちのリストを用意しましょう。
# 動物たちのリストを定義
animals=['とら','ねこ','らいおん','しまうま','きりん','しろくま']
「animals」というリストには6匹の動物が登録されています。通常、リストから要素へのアクセスはインデクスを指定します。
# インデックスで要素を指定
animals[3]
インデクスは0から始まるので、animalsには0~5のインデクスが振られた6つの要素があります。インデクス3を指定しているので、初めから数えて4番目の要素である「しまうま」が取り出されました。
基本的な使い方
次にスライス処理をみていきましょう。
# スライスで要素を指定
animals[0:3]
スライスのときは、終点で指定したインデクスは含まれないので、インデクスが0~2までの先頭から3要素が取り出されます。終点の要素は含まれない、という点に注意してください。
ここさえ注意すれば、簡単ですね。次に始点・終点が省略される場合を見ていきましょう。
始点・終点の省略
これも知っていれば何も問題ありません。まずは始点が省略された場合をみていきましょう。
# 始点の省略
animals[:3]
始点を省略すると、「0」を指定したのと同じ、つまり先頭からデータを取得してくれます。今回は始点が省略され、終点で3が指定されているから、先ほどと同じようにインデクスが0~2である先頭から3要素が取得されています。
次に終点が省略された場合を見ていきましょう。
# 終点の省略
animals[3:]
終点が省略された場合は、シーケンスの末尾まで取得されます。今回は始点が3なのでインデクスが3以降の要素を取得、つまりインデクスが3~5の3要素が取り出されます。
では始点も終点もしょうりゃくされた場合はどうでしょうか?
# 始点・終点の省略
animals[:]
この場合はすべての要素が取り出されます。これは始点の省略では先頭から、終点の省略では末尾まで取り出されるのだから、始点・終点の両方が省略された場合は先頭から末尾まで取り出される、というのは想像できますね。
ステップの指定
実は開始位置(start)
と終了位置(stop)だけでなく、
増分(step)
を指定することができます。
stepで指定した値ずつ、始点から増加させて終点の手前までの値を取得できます。stepは省略することができ、それが先に紹介した「sequence[staart:stop]」の形となります。stepはデフォルトで1となっているため、省略するとインデクスを1ずつ増加させます。では、みていきましょう。
# 始点・終点・増分を指定
animals[0:5:2]
始点が0、終点が5で増分が2なので、始点0から初めて2ずつ増やして5の手前までです。なので、インデクスが0,2,45要素が取り出されます。いま、animalsは6つの要素しかなく、インデクスが0から5までなので、始点・終点を省略しても同じ結果が得られます。試してみましょう。
# 始点・終点を省略して増分を指定
animals[::2]
[::2]は、はじめてみると、何を表しているのだろう?と思うかもしれませんが、順を追って理解していれば問題ありませんね。始点・終点が省略されているのですから、始点からはじめて増分2で要素を取り出しています。
負数の指定
最後に負数での指定を見ていきましょう。まずは増分(step)を省略した「sequence[始点:終点]」の形で見ていきましょう。始点・終点を負数で指定すると、末尾からの位置を指定したことになります。「-1」が末尾の要素で、「-2」が末尾から数えて2つめを表します。実際に試してみましょう。
# 負数で指定
animals[:-1]
始点が省略されているから始めから、終点に「-1」が指定されているので末尾の手前まで取り出されていますね。次に始点を省略せずに指定してみましょう。
# 負数で指定
animals[2:-2]
animalsのリストは、[‘とら’, ‘ねこ’, ‘らいおん’, ‘しまうま’, ‘きりん’, ‘しろくま’] でした。今回、始点が2なので「らいおん」からですね。終点は「-2」なので後ろから2番目である「きりん」の手前まで、つま「しまうま」までが抽出されます。
次に、始点にも負数を指定してみます。
# 負数で指定
animals[-5:-1]
慣れてくると簡単ですね。始点が「-5」なので後ろから5番目である「ねこ」からです。終点は「-1」なので末尾の「しろくま」の手前の「きりん」までが取り出されています。
最後に増分(step)にも負数を指定してみましょう。増分(step)に負数を指定した場合は、後ろから要素を取得することになります。
# 増分に負数を指定
animals[::-1]
もともとのanimalsは、[‘とら’, ‘ねこ’, ‘らいおん’, ‘しまうま’, ‘きりん’, ‘しろくま’] だったので、逆順に取り出されているのがわかります。末尾から1つずつ取り出しているのですね。増分を-2にすると、1つおきに取り出されます。
# 増分に負数を指定(1つおきに取り出す)
animals[::-2]
予想通りになっていますね!!
まとめ
今回はスライスによる要素の抽出を学びました。始点・終点・増分を指定することができ、間をコロンでつなぐのでしたね。それぞれを省略することができることを知っておけば簡単です。注意点は、終点は「含まない」ということでした。
また、少しはじめはとっつきにくいのが負数の指定でした。これは末尾から数えるということと、増分を負数に指定した場合は、末尾から取り出される、ということを理解しておけば完璧です。
もうこれで迷いませんね。
コメント