how-to-index-and-slice-strings-in-python-3
前書き
Python文字列データ型は、文字、数字、空白文字、または記号で構成される1つ以上の個々の文字で構成されるシーケンスです。 文字列はシーケンスであるため、他のシーケンスベースのデータ型と同じ方法で、インデックス付けとスライスを通じてアクセスできます。
このチュートリアルでは、インデックスを使用して文字列にアクセスし、文字シーケンスを使用して文字列をスライスし、カウントおよび文字の場所を特定する方法について説明します。
文字列のインデックス方法
インデックス番号に対応するアイテムを持つhttps://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3[list data type]のように、文字列の各文字もインデックスに対応しますインデックス番号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です。
感嘆符( !
)にはインデックス番号も関連付けられています。 `+ *#$ and。;?+`などのその他の記号または句読点も文字であり、独自のインデックス番号に関連付けられます。
Python文字列の各文字に対応するインデックス番号があるため、他のシーケンシャルデータ型と同じ方法で文字列にアクセスして操作できます。
正のインデックス番号による文字へのアクセス
インデックス番号を参照することにより、文字列内の文字の1つを分離できます。 これを行うには、インデックス番号を角かっこで囲みます。 文字列を宣言して印刷し、角括弧でインデックス番号を呼び出しましょう。
ss = "Sammy Shark!"
print(ss[4])
Outputy
文字列の特定のインデックス番号を参照すると、Pythonはその位置にある文字を返します。 文字 `+ y `は文字列 ` ss =” Sammy Shark! “`のインデックス番号4にあるため、 ` 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 |
負のインデックス番号を使用すると、次のように、-3インデックスでの位置を参照して、文字「+ r +」を出力できます。
print(ss[-3])
Outputr
負のインデックス番号を使用すると、長い文字列の末尾に向かって単一の文字を分離するのに有利です。
文字列のスライス
文字列から一連の文字を呼び出すこともできます。 「+ Shark 」という単語を単に印刷したいとします。 これを行うには、元の文字列内の文字のシーケンスである*スライス*を作成します。 スライスでは、コロン ` [x:y] +`で区切られたインデックス番号の範囲を作成することにより、複数の文字値を呼び出すことができます。
print(ss[6:11])
OutputShark
`+ [6:11] +`のようにスライスを構築するとき、最初のインデックス番号はスライスの開始位置(両端を含む)であり、2番目のインデックス番号はスライスの終了位置(排他的)です。上記の範囲は、文字列が終了した直後に発生するインデックス番号でなければなりません。
文字列をスライスするとき、* substring *を作成します。これは、本質的に別の文字列内に存在する文字列です。 `+ ss [6:11] `を呼び出すと、文字列 ` Sammy Shark!`内に存在するサブ文字列 ` Shark +`を呼び出しています。
文字列の両端を含める場合は、 `+ string [n:n] `構文の数字の1つを省略できます。 たとえば、文字列 ` ss +`の最初の単語-“Sammy”を出力する場合、次のように入力します。
print(ss[:5])
OutputSammy
これを行うには、スライス構文でコロンの前のインデックス番号を省略し、サブストリングの終わりを参照するコロンの後のインデックス番号のみを含めます。
文字列の途中から始まり、最後まで出力される部分文字列を出力するには、次のようにコロンの前にインデックス番号のみを含めることで実行できます。
print(ss[7:])
Outputhark!
コロンの前にインデックス番号のみを含め、2番目のインデックス番号を構文から除外すると、サブストリングは、呼び出されたインデックス番号の文字から文字列の末尾に移動します。
負のインデックス番号を使用して文字列をスライスすることもできます。 前に説明したように、文字列の負のインデックス番号は-1から始まり、文字列の先頭に到達するまでそこからカウントダウンします。 負のインデックス番号を使用する場合、文字列の最初の方にある小さい番号から始めます。
2つの負のインデックス番号を使用して、文字列「+ ss +」をスライスします。
print(ss[-4:-1])
Outputark
文字「a」は-4インデックス番号の位置にあり、文字「k」は-1インデックス番号の位置の直前にあるため、部分文字列「ark」は文字列「Sammy Shark!」から印刷されます。
文字列のスライス中にストライドを指定する
文字列スライスでは、2つのインデックス番号に加えて、3番目のパラメーターを使用できます。 3番目のパラメーターは、* stride *を指定します。これは、文字列から最初の文字が取得された後に前方に移動する文字数を指します。 これまでのところ、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構文の `+ ss [0:12:2] +`の最後のパラメーターとして2のストライドを指定すると、1文字おきにスキップされます。 赤で印刷されている文字を見てみましょう。
時間です!
インデックス番号5の空白文字もスキップされ、2のストライドが指定されていることに注意してください。
ストライドパラメーターに大きな数値を使用すると、サブストリングが大幅に小さくなります。
print(ss[0:12:4])
OutputSya
Python構文の最後のパラメーターとして4のストライドを指定すると、 `+ ss [0:12:4] +`は4文字ごとにのみ出力します。 繰り返しますが、赤で印刷されている文字を見てみましょう。
エイミー・シャーク!
この例では、空白文字もスキップされます。
文字列全体を出力しているため、2つのインデックス番号を省略して、構文内に2つのコロンを保持して同じ結果を得ることができます。
print(ss[::4])
OutputSya
2つのインデックス番号を省略してコロンを保持すると、文字列全体が範囲内に維持されますが、ストライドの最後のパラメーターを追加すると、スキップする文字数が指定されます。
さらに、ストライドに負の数値を指定できます。ストライドを-1に設定すると、元の文字列を逆順で印刷するために使用できます。
print(ss[::-1])
Output!krahS ymmaS
パラメーターを指定しない2つのコロンには元の文字列のすべての文字が含まれ、1のストライドにはスキップせずにすべての文字が含まれ、ストライドを無効にすると文字の順序が逆になります。
再び-2のストライドでこれを実行しましょう。
print(ss[::-2])
Output!rh ma
この例の「+ ss [::-2] +」では、インデックス番号がパラメータに含まれていないため、元の文字列全体を処理し、負のストライドを介して文字列を逆にします。 さらに、-2のストライドを使用することにより、逆の文字列の1文字おきをスキップしています。
kaSymS
この例では、空白文字が印刷されます。
Pythonスライス構文の3番目のパラメーターを指定することにより、元のストリングからプルするサブストリングのストライドを示しています。
カウント方法
文字列内の文字に対応する関連するインデックス番号について考えていますが、文字列をカウントしたりインデックス番号を返すメソッドをいくつか試す価値があります。 これは、ユーザー入力フォーム内で受け入れたい文字数を制限したり、文字列を比較したりするのに役立ちます。 他の順次データ型と同様に、文字列はいくつかの方法でカウントできます。
まず、文字列、リスト、https://www.digitalocean.com/communityを含む、順序付きまたは順序なしのシーケンスである任意のデータ型の長さを取得できる `+ len()+`メソッドを見ていきます。 / tutorials / understanding-tuples-in-python-3 [tuples]、およびhttps://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3[dictionaries]。
文字列 `+ ss +`の長さを出力しましょう:
print(len(ss))
Output12
文字列「Sammy Shark!」の長さは、空白文字と感嘆符記号を含めて12文字です。
変数を使用する代わりに、文字列を `+ len()+`メソッドに直接渡すこともできます。
print(len("Let's print the length of this string."))
Output38
`+ len()+`メソッドは、文字列内の文字の総数をカウントします。
1つの特定の文字または一連の文字が文字列に現れる回数をカウントしたい場合は、 `+ str.count()`メソッドでカウントできます。 文字列 ` ss =” Sammy Shark! “+`を使用して、文字 “a”の出現回数をカウントしましょう。
print(ss.count("a"))
Output2
別のキャラクターを検索できます:
print(ss.count("s"))
Output0
文字「S」は文字列に含まれていますが、各文字では大文字と小文字が区別されることに注意してください。 大文字と小文字を区別せずに文字列内のすべての文字を検索する場合は、 `+ str.lower()+`メソッドを使用して、最初に文字列をすべて小文字に変換できます。 このメソッドの詳細については、「https://www.digitalocean.com/community/tutorials/an-introduction-to-string-methods-in-python-3#making-strings-upper-and-lower-caseをご覧ください。 [Python 3の文字列メソッドの紹介]。」
一連の文字で `+ 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 +」では、「likes」に相当する文字シーケンスが元の文字列に3回出現します。
また、文字列内で文字または文字シーケンスが発生する位置を見つけることもできます。 `+ str.find()+`メソッドでこれを行うことができ、インデックス番号に基づいて文字の位置を返します。
文字列 `+ ss +`の最初の“ m”の位置を確認できます。
print(ss.find("m"))
Ouput2
最初の文字「m」は、文字列「Sammy Shark!」のインデックス位置2にあります。文字列「+ ss +」のインデックス番号位置を確認できますhttps://www.digitalocean.com/community/tutorials/how -to-index-and-slice-strings-in-python-3#how-strings-are-indexed [above]。
文字列「+ likes +」の最初の「いいね」文字シーケンスがどこにあるかを確認しましょう。
print(likes.find("likes"))
Ouput6
文字シーケンス「likes」の最初のインスタンスは、インデックス番号位置6から始まります。この位置には、シーケンス「+ likes 」の文字「 l +」が配置されます。
「いいね」の2番目のシーケンスがどこから始まるのかを知りたい場合はどうでしょうか。 特定のインデックス番号で始まる `+ str.find()+`メソッドに2番目のパラメーターを渡すことで、これを行うことができます。 したがって、文字列の先頭から始める代わりに、インデックス番号9から始めましょう。
print(likes.find("likes", 9))
Output34
インデックス番号9で始まるこの2番目の例では、文字シーケンス「likes」の最初の出現はインデックス番号34で始まります。
さらに、3番目のパラメーターとして範囲の終了を指定できます。 スライスと同様に、負のインデックス番号を使用して逆方向にカウントすることでこれを行うことができます。
print(likes.find("likes", 40, -6))
Output64
この最後の例では、インデックス番号40と-6の間のシーケンス「いいね」の位置を検索します。 入力された最後のパラメータは負の数であるため、元の文字列の末尾からカウントされます。
+ len()+
、 + str.count()+
、および `+ str.find()+`の文字列メソッドを使用して、長さ、文字または文字シーケンスの数、および文字列内の文字または文字シーケンス。
結論
文字列の特定のインデックス番号、または文字列の特定のスライスを呼び出すことができると、このデータ型を使用する際の柔軟性が高まります。 リストやタプルなどの文字列はシーケンスベースのデータ型であるため、インデックス付けとスライスを通じてアクセスできます。
https://www.digitalocean.com/community/tutorials/how-to-format-text-in-python-3 [フォーマット文字列]およびhttps://www.digitalocean.com/community/tutorialsの詳細をご覧ください。 / an-introduction-to-string-methods-in-python-3 [string methods]を使用して、文字列の学習を続けます。