【Python 入門】文字列③ インデックスとスライス

今回は文字列を細かく操作する方法について取り上げていきます。特定の場所で文字列を切り出したいときや削除したいときに使用しますので、しっかりと覚えておきましょう。

インデックスについて

インデックスという言葉については耳にする機会は多いかもしれません。ただし、インデックスという言葉の意味につてはよくわからないもしくはふんわりとしたイメージしかないという方も多いのではないでしょうか。まずはインデックスの英語の意味を確認しましょう。

(本などの)索引、(計器などの)目盛り、指針、表示、指標

出典:indexとは 意味・読み方・使い方 Weblio 辞書より

インデックスは索引、目盛りといった言葉の通り、そのデータがある場所の番地を指し示すためのものです。国語辞典で索引からプログラミングという言葉を引き出したい場合索引より、ページ番号を確認しますよね?このページ番号こそがインデックスというわけです。

配列、インデックス

文字列のインデックス

インデックスが、データがある場所の番号を司っていることはわかりましたが、文字列のインデックスとは何というところを説明します。

文字列のインデックスというと例えば「Hello」という文字列だった場合、”H”を一番目の文字として、”o”を最後の文字と一文字ずつインデックスが割り当てられます。さらにインデックスは0が一番最初の番号になるので(1が一番目でないことに注意!)”H”の番号は0、”o”の番号は4になります。

また、インデックスは後ろから番号を振ることができます。後ろからのインデックス番号の場合、最初のインデックスの番号は-1(0ではないことに注意!)から始まります。上記の場合後ろからのインデックス番号は”o”が-1、”H”が-4になります。

インデックスイメージ

上記を踏まえたうえで、インデックス番号2(もしくは-3)の”l”を指定することを考えてみます。インデックスを指定するためにはまず、文字リテラルが変数に格納されている必要があります。例えば[word]という変数に”Hello”という文字列を格納した場合の”l”の指定の方法はword[2]、もしくはword[-3]となります。

この指定方法は後に取りあげるリストと同様の指定方法です。リストは配列ともいわれますが、変数の箱が横に連なったようなデータの事でその箱一つ一つにデータを入れることができるイメージです。なので、文字列を変数に格納すると文字一つ一つに箱が用意されるようなイメージを持つと良いかもしれません。

インデックスと変数

Pythonではこのように複数のデータを一つの型でまとめて扱うことができ、インデックスを指定してデータを取り出すことができるものをシーケンスといいます。文字列やリスト以外にもいくつかありますが、その都度ご紹介いたします。

ここまではイメージの話でしたので実際の書き方についてコードで確認しましょう。

スライス

続いてはスライスについて確認していきます。スライスはインデックス番号を指定する際に範囲を指定してシーケンス型のデータから要素を取り出すことができるものです。スライスの動詞の意味は切り出すといった意味がありますが、まとまったデータから使いたい部分だけを切り出すというイメージを持つと覚えやすいと思います。

スライスの対応記号ですが「:(コロン)」です。指定方法は開始値をコロンの左に、終了値を右側に記載します。

インデックスの範囲

スライスの厄介なところはindexの開始値は切り出し対象に含まれますが、終了値は含まれないことです。どういうことかというと「Hello」から、”ell”を取り出したい場合、”e”のインデックスを開始値に指定しますが、2つ目の”l”のインデックス3を終了値に指定してしまうと、”el”しか取り出せないのです。

なのでスライスを指定するときは開始値は含めたい最初のインデックスを指定し、終了値は最後のインデックスの値+1を指定してあげる必要があります。

また、開始値のインデックス番号の数値 < 終了値のインデックス番号の数値 となっている必要があり、逆に書いてしまうと該当する範囲がねじれてなくなってしまうので、何も出力されません。

また開始値と終了値は省略して記載することができます。

終了値を省略し、[1:]と書いた場合、インデックス番号1から後ろすべてが切り出し対象になります。

開始値を省略し、[:4]と書いた場合、インデックス番号0から4の手前まで、つまり0から3までのインデックス番号の値が切り出されます。

また、両方を省略し、[:]と書いた場合、すべての要素が切り出されます。というより切り出さずそのまま取り出しているだけですね。

スライスにはもちろん後ろからのインデックスも指定できます。

IndexError

IndexErrorはPythonが出力するエラーの一つです。どういう時に発生するエラーかといいますと、指定したシーケンスの中にあるデータが持っていないインデックス番号を指定したときに発生するエラーです。

“Hello”の例で記載しますと、Helloの文字がそれぞれ持つインデックスは「1 ~ 4」もしくは「-1 ~ -5」です。そのためこの範囲を超えた数値、例えば「6」や「-7」を指定したときに発生します。 

IndexError

実際に実装している際には上から流れてきた変数が想定していたものより短いデータが流れてきてしまった場合に、実際の長さを超えたインデックスを指定してしまいエラーが発生するといったことがよくあります。なのでindexを直に指定する場合はどんな長さの変数が来るのかをしっかり網羅的に把握しておく必要があります。

以上で、インデックスとスライスについては完了です。

Pythonでは行列計算を実施する際にスライスは何度も何度も使用するので、この書き方だとどこからどこまでの値を指定しているのかすぐわかるように見慣れておく必要があります。

今回はここまでです。お疲れ様でした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

本業ではPHPを使ったWEBアプリやJavaを使用した基幹アプリを作成しております。Pythonは個人的に勉強しており、E資格を取ったりしたおかげで、業務でAIの研究とかも任されるようになりました。学習のアウトプットのために本サイトを運営しておりますが、これからPythonを学ぶという人のお役に立てればいいなと思います。わからないことや調査して記事にしてほしいことがございましたらご連絡いただけると幸いです。

コメント

コメントする

目次
閉じる