Pythonで部分文字列を抽出(スライス)する方法|反転やstep,マイナスのインデックスの使い方を解説

スポンサーリンク
スポンサーリンク

イントロダクション

この記事では、Pythonで文字列をスライスする方法について学びます。

Pythonは文字列のスライスをサポートしています。

これは、ユーザーが定義した開始と終了のインデックスに基づいて、与えられた文字列から新しいサブ文字列を作成することです。

Pythonで文字列をスライスする方法

Pythonで文字列をスライスする場合、以下の1行のようにシンプルになります。

res_s = s[ start_pos:end_pos:step ]

ここで

  • res_s は返された文字列を格納します。
  • sは与えられた文字列です。
  • start_pos は文字列 s をスライスする開始インデックス、 end_pos は文字列 s をスライスする終了インデックスです。
  • end_pos はスライス操作を終了するインデックスです。
  • step は start_pos から end_pos までのスライス処理にかかるステップ数です。

Note: 上記3つのパラメータはすべてオプションです。

デフォルトでは、 start_pos は 0 に設定され、 end_pos は文字列の長さに等しいとみなされ、 step は 1 に設定されます。

それでは、Pythonで文字列をスライスする方法をより良く理解するために、いくつかの例を挙げてみましょう。

Pythonで文字列をスライスする – サンプル

Pythonの文字列のスライスは、様々な方法で行うことができます。

通常、文字列の要素(文字)には、0から始まりn-1(nは文字列の長さ)までの単純なインデックスを使用してアクセスします。

したがって、文字列 string1 の最初の要素にアクセスするには、次のコードを使用します。

s1 = String1[0]

もう一つの方法は、ネガティブインデックスを使うことです。

ネガティブインデックスは-1から-n(nは与えられた文字列の長さ)までの範囲から始まります。

ただし、ネガティブインデックスは文字列のもう一方の端から行われます。

したがって、今回最初の文字にアクセスするためには、次のようなコードが必要です。

s1 = String1[-n]

さて、このような考え方で文字列をスライスする方法をいくつか挙げてみましょう。

1. Pythonで文字列を開始と終了でスライスする

文字列をスライスするには、文字列の開始と終了のインデックスを指定することで簡単にできます。

以下の例では、通常のインデックスとネガティブインデックスの両方について、開始と終了のインデックスを使用して文字列をスライスする方法を説明します。

#string slicing with two parameters
s = "Hello World!"
 
res1 = s[2:8]
res2 = s[-4:-1] #using negative indexing
 
print("Result1 = ",res1)
print("Result2 = ",res2)

結果は以下の通りです。

Result1 =  llo Wo
Result2 =  rld

ここで

  • 文字列 s は “Hello World!” として初期化されます。
  • これは、結果として得られる部分文字列が s[2] から s[8-1] までの文字を含むことを意味します。
  • 同様に、次の文字列は、s[-4]からs[(-1)-1]までの文字が含まれるはずです。

したがって、私たちの出力は正当なものです。

2. 先頭または末尾のみを使って文字列をスライスする

前述したように、文字列スライスのための3つのパラメータはすべてオプションです。

したがって、1つのパラメータを使うだけで簡単に作業を行うことができます。

以下のコードを見て、よく理解してください。

#string slicing with one parameter
s1= "Charlie"
s2="Jordan"
 
res1 = s1[2:] #default value of ending position is set to the length of string
res2 = s2[:4] #default value of starting position is set to 0
 
print("Result1 = ",res1)
print("Result2 = ",res2)

結果は以下の通りです。

Result1 =  arlie
Result2 =  Jord

ここで

  • まず、s1 と s2 という二つの文字列を初期化します。
  • 両者をスライスするために、s1のstart_posとs2のend_posだけを記載します。
  • したがって、res1には、s1のインデックス2から最後までの文字列が含まれます(デフォルトではn-1に設定されています)。一方、res2では、0から4(前述)までのインデックスを持ちます。

3. Python で Step パラメータを使用して文字列をスライスする

step` は、あるインデックスから他のインデックスへのスライス操作のジャンプを決定します。

以下の例をよく見てください。

#string slicing with step parameter
s= "Python"
s1="Kotlin"
 
res = s[0:5:2]
res1 = s1[-1:-4:-2] #using negative parameters
 
print("Resultant sliced string = ",res)
print("Resultant sliced string(negative parameters) = ",res1)

結果は以下の通りです。

Resultant sliced string =  Pto
Resultant sliced string(negative parameters) =  nl

上のコードでは

  • 2つの文字列 s と s1 を初期化し、最初の例と同じように、与えられた開始と終了のインデックスでそれらをスライスすることを試みています。
  • しかし今回は、前の例ではデフォルトで1に設定されていたステップの値について言及しました。
  • 最初の文字が s[0] (‘P’) で、次の文字が s[0+2], s[2+2] となり、インデックスが5を下回るまで続くのです。
  • 次のres1では、(-2)となります。したがって、前のケースと同様に、インデックスが(-4)未満になるまで、部分文字列の文字はs1[-1]、次にs1[(-1)+(-2)]、s1[-3]になります。

4. Pythonのスライシングを使った文字列の逆変換

Pythonの負のインデックスの文字列スライシングを使うと、文字列を反転して別の変数に格納することもできます。

そのためには、「ステップ」のサイズを(-1)にする必要があります。

以下の例で、それがどのように機能するか見てみましょう。

#reversing string using string slicing
s= "Python"
rev_s = s[::-1] #reverse string stored into rev_s
 
print(rev_s)

結果は以下の通りです。

nohtyPksA

見ての通り、文字列 s は反転され、 rev_s に格納される。

注意:この場合も、元の文字列はそのままで、手を加えることなく残ります。

まとめ

この記事では、文字列スライスの方法論とそのさまざまな形態について学びました。

読者がこのトピックを明確に理解できたことを願っています。

このトピックに関する更なる質問があれば、以下のコメント欄からお気軽にどうぞ。

タイトルとURLをコピーしました