かゆい所に手が届く解説

Pythonで文字列を取り出す インデックス と スライス の違い

文字列の操作は、プログラミングの中でも多くの場面で必要となります。

文字と文字とくっつけたり、加工したり、取り出したり…。

その用途は意外と多いものです。

この記事では、文字列を取り出す際に使われる「インデックス」と「スライス」について様々なパターンと使い方を紹介します。

この記事の対象者は初心者です。
目安として、print 文が使えれば理解できます。

インデックスについても説明しているので、
分からないという方も安心して読み進めてください。

基本的な使い方

インデックス構文・スライス構文

まずは基本的な構文としての使い方です。

文字列に対し、 [ ] カッコ内に指定したインデックス番号の位置にある文字列 を取り出すことができます。

①インデックス構文

インデックス構文は、1文字を取り出すことができます。

準備として、変数 text を用意し「あいうえおかきくけこさしすせそ」という文字列を代入します。

text = 'あいうえおかきくけこさしすせそ'

このとき、変数 text 内の「左から4番目」の文字「え」を取り出したい場合、そのインデックス番号は「3」になるので、

print(text)

と記述することで、「え」を出力することができます。

文字の位置とインデックス番号の関係を表す図

「左から 4 番目なのにインデックス番号は 3 になるのはなぜ?」と思う方は、次の説明「POINT:インデックス番号とは?」を見てください。

理解されている方は次の「②スライス構文」をご覧ください。

インデックス番号とは?

プログラミング言語全般に言えることですが、文字列内の文字の番号は、先頭を 0 として以降 1 ずつ増えます。

文字列内の順番とインデックス番号の関係

※ ちなみに、C言語 や Java ではインデックスのことを「添え字」と呼びます。

つまり、上の例で「え」は「左から 4 番目」なので「インデックスは3」ということです。

文字列内の順番とインデックス番号の関係を具体的に説明

難しくはありませんが、初心者の方は少し混乱するかもしれませんね。

インデックス番号は、負数で指定する場合もあるので、そのパターンもご紹介します。

負数のインデックスの位置関係を表す図
最後尾を -1 として、前の方にマイナスが増えていきます

※負数のインデックスを使った方法は、次の②スライス構文で実際に使い方をご紹介します。

②スライス構文

次に、スライス構文を使ってみましょう。

スライス構文では、2 文字以上の文字を取り出すことができます。

スライス構文の基本的な説明
text[start:end]
または
text[start:end:step]

先ほどの①インデックス構文と同じように、変数 text を用意しておきます。

text = 'あいうえおかきくけこさしすせそ'

今回は「かきくけこ」を取り出したいと思いますので、インデックス番号は「5 ~ 9」となりますね。

このとき、インデックス番号を指定するときの注意点があります。

「後ろのインデックス番号」を指定するときは、該当の位置+1として指定します。

つまり、インデックス番号は「5 ~ 9」ではなく「5 ~ 10」を指定する必要があります。

スライスの場合、「~(から)」の意味を「:(コロン)」で指定します。

この場合、「5 ~ 10」は「5 : 10」と指定します。

print(text[5:10])

結果は「かきくけこ」が出力されます。

かきくけこ

なお、スライスには他にもたくさんのパターンがあります。

最初からすべて覚えるのは難しいですが、一通りご紹介します。

その他のスライスのパターン

また、上の例の実行結果を明記すると下図の様になります。

その他のスライスのパターンの実行結果

こうしてみるとややこしいですが、実際に使いたい時にテキストやウェブで調べればすぐに分かるので安心してください。

上記のうち「マイナス」が付くものは分かりづらいと思うので、下図を用意しました。

負数のインデックスの位置関係を表す図
やっぱり分かりにくいですね、、、
インデックスとスライスの実行結果例

実用例

ここまで基本的な使い方をご紹介しました。

基礎というのは、面白くありませんよね。

そこで、「じゃあスライスってどういう時に役に立つのよ!?」という方に向けて、実用例を少しご紹介します。

実例①

始めに、必要な部分のみを抜き出す処理について。

次のように、ファイル名が変数に入っているとします。

file1 = 'index.html'
file2 = 'layout.html'
file3 = 'form.html'

このとき、「ファイル名+拡張子」の中から「ファイル名」だけを取り出したいとします。

拡張子は「 .(ドット)」を含めて5文字あるので、下の様にスライスを使います。

print(file1[0:-5])
print(file2[0:-5])
print(file3[0:-5])

すると、それぞれ「 .html 」を除いたファイル名のみを取り出すことができるのです。

※分かりやすさを重視して、ここでは for 文 は使っていません。

実例①の解説

それぞれファイル名のみが抜き出されました。

index
layout
form

「 .html 」は 5 文字なので、「後ろから 5 文字を除いて先頭から取り出す」という処理が必要です。

つまり、インデックス番号の指定を[ 0 : – 5 ]とすることで、「先頭の 0 番から -5 の位置まで」を指定することになるのです。

実例②

次に、置換のような使い方をご紹介します。

変数 text には、「 – h – e – l – l – o – 」という文字が入っているとします。

この中から、「 -(ハイフン)」だけを除いた文字を抜き出します。

text = '-h-e-l-l-o-'

print(text[1::2])

ここでは、開始位置「1」として終了位置は「空欄」のため省略 = 最後までとし、ステップは「2」としています。

よって、「インデックス番号 1 から最後まで 2 文字ずつ取り出す」という処理になるのです。

実例②の解説

まとめ

今回はPythonで文字列を取り出す インデックス と スライス の違いとその実用例を解説しました。

最初から覚えることは難しいかもしれませんが、実際に必要な場面になったらこの記事を参考にしてもらえると嬉しいです。

基本的な使い方はご理解いただけたと思いますが、もっと詳しく知りたいという方はコメントにてお知らせください。

インデックスを理解すると、こちらの記事のようなリストも簡単に取り扱うことができます。

Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。

それでは、ステキなPythonライフを!

ABOUT ME
papa3
某教育機関で現役の講師をしながら、ブログとYouTubeでプログラミングの情報を発信しています。個人でもウェブアプリケーション開発と運営をしながら本業収入<副業を目指しています!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です