Python3で文字列にインデックスを付けてスライスする方法
###序章
Python文字列データ型は、文字、数字、空白文字、または記号で構成される1つ以上の個別の文字で構成されるシーケンスです。 文字列はシーケンスであるため、他のシーケンスベースのデータ型と同じ方法で、インデックス付けとスライスを介してアクセスできます。
このチュートリアルでは、インデックス作成による文字列へのアクセス、文字シーケンスによる文字列のスライス、およびいくつかのカウント方法と文字位置の方法について説明します。
前提条件
Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)
##文字列のインデックス付け方法
インデックス番号に対応する項目を持つlistデータ型と同様に、文字列の各文字もインデックス番号0から始まるインデックス番号に対応します。
文字列の場合 Sammy Shark!
インデックスの内訳は次のようになります。
S | a | m | m | y | S | h | a | r | k | ! | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
ご覧のとおり、最初の S
インデックス0で始まり、文字列はインデックス11で終わります。 !
シンボル。
また、間の空白文字にも注意してください Sammy
と Shark
独自のインデックス番号にも対応しています。 この場合、空白に関連付けられているインデックス番号は5です。
感嘆符(!
)にもインデックス番号が関連付けられています。 その他の記号や句読点など *#$&.;?
、も文字であり、独自のインデックス番号に関連付けられます。
Python文字列の各文字に対応するインデックス番号があるという事実により、他のシーケンシャルデータ型と同じ方法で文字列にアクセスして操作することができます。
##正のインデックス番号による文字へのアクセス
インデックス番号を参照することで、文字列内の文字の1つを分離できます。 これを行うには、インデックス番号を角かっこで囲みます。 文字列を宣言して印刷し、角かっこで囲まれたインデックス番号を呼び出しましょう。
情報:このチュートリアルのサンプルコードに従うには、ローカルシステムでPythonインタラクティブシェルを開いて、 python3
指図。 次に、例の後に追加して、例をコピー、貼り付け、または編集できます。 >>>
促す。
ss = "Sammy Shark!"
print(ss[4])
Outputy
文字列の特定のインデックス番号を参照すると、Pythonはその位置にある文字を返します。 手紙以来 y
文字列のインデックス番号4にあります ss = "Sammy Shark!"
、印刷するとき ss[4]
私たちは受け取ります y
出力として。
インデックス番号を使用すると、文字列内の特定の文字にアクセスできます。
##負のインデックス番号による文字へのアクセス
長い文字列があり、最後に向かってアイテムを特定したい場合は、インデックス番号から始めて、文字列の最後から逆方向にカウントすることもできます。 -1
.
同じ文字列の場合 Sammy Shark!
負のインデックスの内訳は次のようになります。
S | a | m | m | y | S | h | a | r | k | ! | |
---|---|---|---|---|---|---|---|---|---|---|---|
-12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
負のインデックス番号を使用することで、文字を印刷できます r
、-3インデックスでの位置を参照することにより、次のようになります。
print(ss[-3])
Outputr
負のインデックス番号を使用すると、長い文字列の終わりに向かって1文字を分離するのに有利な場合があります。
##スライス文字列
文字列から文字の範囲を呼び出すこともできます。 単語だけを印刷したいとします Shark
. これを行うには、元の文字列内の文字のシーケンスであるスライスを作成します。 スライスを使用すると、コロンで区切られたインデックス番号の範囲を作成することで、複数の文字値を呼び出すことができます [x:y]
:
print(ss[6:11])
OutputShark
スライスを作成するときのように [6:11]
、最初のインデックス番号はスライスの開始位置(包括的)であり、2番目のインデックス番号はスライスの終了位置(排他的)です。そのため、上記の例では、範囲は文字列の終了後に発生するインデックス番号である必要があります。 。
文字列をスライスするときは、 substring を作成します。これは、基本的に別の文字列内に存在する文字列です。 電話するとき ss[6:11]
、部分文字列を呼び出しています Shark
文字列内に存在する Sammy Shark!
.
文字列のいずれかの端を含める場合は、数値の1つを省略できます。 string[n:n]
構文。 たとえば、文字列の最初の単語を印刷する場合 ss
—「サミー」—次のように入力します。
print(ss[:5])
OutputSammy
これを行うには、スライス構文でコロンの前のインデックス番号を省略し、サブストリングの終わりを参照するコロンの後のインデックス番号のみを含めます。
文字列の途中から始まり最後まで印刷する部分文字列を印刷するには、次のように、コロンの前にインデックス番号のみを含めることでこれを行うことができます。
print(ss[7:])
Outputhark!
コロンの前にインデックス番号のみを含め、構文から2番目のインデックス番号を除外することにより、サブストリングは、呼び出されたインデックス番号の文字から文字列の最後に移動します。
負のインデックス番号を使用して文字列をスライスすることもできます。 前に説明したように、文字列の負のインデックス番号は-1から始まり、文字列の先頭に到達するまでそこからカウントダウンします。 負のインデックス番号を使用する場合は、文字列の前半にある小さい番号から始めます。
2つの負のインデックス番号を使用して文字列をスライスしましょう ss
:
print(ss[-4:-1])
Outputark
サブストリング「ark」は、ストリング「SammyShark!」から印刷されます。 文字「a」は-4インデックス番号の位置にあり、文字「k」は-1インデックス番号の位置の前にあるためです。
##文字列のスライス中にストライドを指定する
文字列のスライスでは、2つのインデックス番号に加えて3番目のパラメータを受け入れることができます。 3番目のパラメーターは、 stride を指定します。これは、文字列から最初の文字が取得された後に前方に移動する文字数を示します。 これまでのところ、ストライドパラメータを省略しており、Pythonのデフォルトはストライド1であるため、2つのインデックス番号の間のすべての文字が取得されます。
サブストリング「Shark」を出力する上記の例を確認してみましょう。
print(ss[6:11])
OutputShark
ストライドが1の3番目のパラメーターを含めることで、同じ結果を得ることができます。
print(ss[6:11:1])
OutputShark
したがって、ストライド1は、スライスの2つのインデックス番号の間のすべての文字を取り込みます。 strideパラメータを省略すると、Pythonはデフォルトで1になります。
代わりに、ストライドを増やすと、文字がスキップされることがわかります。
print(ss[0:12:2])
OutputSmySak
Python構文の最後のパラメーターとしてストライド2を指定する ss[0:12:2]
1文字おきにスキップします。 強調表示されている文字を確認してみましょう。
S a m m y S h a r k !
インデックス番号5の空白文字も、ストライド2を指定してスキップされることに注意してください。
ストライドパラメータに大きな数値を使用すると、サブストリングが大幅に小さくなります。
print(ss[0:12:4])
OutputSya
Python構文の最後のパラメーターとしてストライド4を指定する ss[0:12:4]
4文字ごとにのみ印刷します。 繰り返しますが、強調表示されている文字を見てみましょう。
S amm y Sh a rk!
この例では、空白文字もスキップされます。
文字列全体を出力しているので、2つのインデックス番号を省略し、構文内に2つのコロンを保持して、同じ結果を得ることができます。
print(ss[::4])
OutputSya
2つのインデックス番号を省略し、コロンを保持すると、文字列全体が範囲内に保持され、strideの最後のパラメーターを追加すると、スキップする文字数が指定されます。
さらに、ストライドに負の数値を指定できます。これを使用して、ストライドを-1に設定すると、元の文字列を逆の順序で印刷できます。
print(ss[::-1])
Output!krahS ymmaS
パラメータが指定されていない2つのコロンには、元の文字列のすべての文字が含まれます。ストライドが1の場合、スキップせずにすべての文字が含まれ、そのストライドを否定すると、文字の順序が逆になります。
これをもう一度やりましょう。ただし、ストライドは-2です。
print(ss[::-2])
Output!rh ma
この例では、 ss[::-2]
、パラメータにインデックス番号が含まれていないため、元の文字列全体を処理し、負のストライドを介して文字列を反転します。 さらに、-2のストライドを使用することにより、反転した文字列の1文字おきにスキップします。
! k r a h S[空白]y m m a S
この例では、空白文字が印刷されています。
Pythonスライス構文の3番目のパラメーターを指定することにより、元の文字列からプルする部分文字列のストライドを示します。
##カウント方法
文字列内の文字に対応する関連するインデックス番号について考えている間、文字列をカウントしたり、インデックス番号を返したりするいくつかのメソッドを実行する価値があります。 これは、ユーザー入力フォーム内で受け入れる文字数を制限したり、文字列を比較したりする場合に役立ちます。 他のシーケンシャルデータ型と同様に、文字列はいくつかの方法でカウントできます。
まず、 len()
文字列、リスト、タプル、ディクショナリなど、順序付けされているかどうかに関係なく、シーケンスである任意のデータ型の長さを取得できるメソッド。
文字列の長さを印刷してみましょう ss
:
print(len(ss))
Output12
弦の長さ「サミーシャーク!」 空白文字と感嘆符記号を含む12文字の長さです。
変数を使用する代わりに、文字列を直接に渡すこともできます len()
方法:
print(len("Let's print the length of this string."))
Output38
The len()
メソッドは、文字列内の文字の総数をカウントします。
1つの特定の文字または文字のシーケンスが文字列に表示される回数をカウントする場合は、 str.count()
方法。 文字列を操作してみましょう ss = "Sammy Shark!"
文字「a」が出現する回数を数えます。
print(ss.count("a"))
Output2
別のキャラクターを検索できます:
print(ss.count("s"))
Output0
文字列には「S」という文字が含まれていますが、各文字では大文字と小文字が区別されることに注意してください。 大文字と小文字を区別せずに文字列内のすべての文字を検索する場合は、 str.lower()
最初に文字列をすべて小文字に変換するメソッド。 このメソッドの詳細については、「 Python3の文字列メソッドの概要」を参照してください。
やってみよう str.count()
文字のシーケンスで:
likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."
print(likes.count("likes"))
Output3
文字列内 likes
、「いいね」に相当する文字シーケンスは、元の文字列に3回出現します。
また、文字列内の文字または文字シーケンスがどの位置にあるかを見つけることもできます。 私たちはこれを行うことができます str.find()
メソッドであり、インデックス番号に基づいて文字の位置を返します。
文字列の最初の「m」がどこにあるかを確認できます ss
:
print(ss.find("m"))
Ouput2
最初の文字「m」は、文字列「SammyShark!」のインデックス位置2にあります。 文字列のインデックス番号の位置を確認できます ss
上。
文字列の最初の「いいね」文字シーケンスがどこにあるかを確認しましょう likes
:
print(likes.find("likes"))
Ouput6
文字シーケンス「いいね」の最初のインスタンスは、文字が配置されるインデックス番号の位置6から始まります。 l
シーケンスの likes
が配置されます。
「いいね」の2番目のシーケンスがどこから始まるかを確認したい場合はどうなりますか? これを行うには、2番目のパラメーターを str.find()
特定のインデックス番号で開始するメソッド。 したがって、文字列の先頭から開始するのではなく、インデックス番号9の後に開始しましょう。
print(likes.find("likes", 9))
Output34
インデックス番号9で始まるこの2番目の例では、文字シーケンス「likes」の最初の出現はインデックス番号34で始まります。
さらに、範囲の終わりを3番目のパラメーターとして指定できます。 スライスと同様に、負のインデックス番号を使用して逆方向にカウントすることでこれを行うことができます。
print(likes.find("likes", 40, -6))
Output64
この最後の例では、インデックス番号40と-6の間のシーケンス「likes」の位置を検索します。 入力された最後のパラメータは負の数であるため、元の文字列の末尾からカウントされます。
の文字列メソッド len()
, str.count()
、 と str.find()
長さ、文字または文字シーケンスの数、および文字列内の文字または文字シーケンスのインデックス位置を決定するために使用できます。
##結論
文字列の特定のインデックス番号、または文字列の特定のスライスを呼び出すことができるため、このデータ型を操作する際の柔軟性が高まります。 リストやタプルなどの文字列はシーケンスベースのデータ型であるため、インデックス作成とスライスを介してアクセスできます。
文字列のフォーマットおよび文字列メソッドの詳細を読んで、文字列の学習を続けることができます。