こんにちは。
今回の学習に入る前に、今まで学習してきた内容の復習です。
これまでの知識を整理して課題を解いていきましょう。これまでの学習の流れです。
四則演算、数値列、文字列についてまとめた記事については、以下の記事を参照ください。
【Python】数値と文字列について【初心者向け】
続きを見る
変数・論理値・演算子については以下の記事をご参照ください。
【Python】変数・論理値・演算子について【初心者向け】
続きを見る
関数の基本については以下の記事をご参照ください。
【Python】関数の基本について【初心者向け】
続きを見る
オブジェクトとメソッドの使い方については以下の記事をご参照ください。
【Python】オブジェクトとメソッドについて【初心者向け】
続きを見る
if, elif, else文の使い方【制御構文】については以下の記事をご参照ください。
【Python】制御構文・条件分岐の基本について【動画・画像付きで解説】
続きを見る
while文の使い方【繰り返し構文】については以下の記事をご参照ください。
【Python】while文の使い方について【繰り返し構文の基本】
続きを見る
for文の使い方については以下の記事をご参照ください。
【Python】for文の使い方について
続きを見る
入力した数値を加算して、入力した値の平均値を求める課題については以下の記事を参照にしてください。
【Python】入力した数値を加算して、ある所で入力値の平均値の求める【課題あり】
続きを見る
今回はシーケンス(sequence) と呼ばれる要素について解説します。
Pythonでは以下のものがシーケンスとして用意されています。
- リスト(
list
) - タプル(
tuple
) - レンジ(
range
) - 文字列(
string
)
次の2つは厳密に言うとシーケンスに属しませんが、同列で説明されることが多い要素です。
- セット(
set
) - 辞書(
dict
)
本記事の学習内容
- puthonのシーケンスについて
- 文字列のデータ構造
- 文字列のスライス
では早速、見ていきましょう。
pythonのシーケンスについての概念
シーケンスとは
pythonで扱う数値のうち、変数を格納する倉庫となる場所、これがシーケンスです。
良くドラマなどで海辺に並んでいる倉庫を思い浮かべてみてください。
その倉庫の一つ一つには「倉庫番号」が割り振られており、また倉庫には一つづつ「オブジェクト」=「データ」を格納することができます。
例えば車が格納されている倉庫が一箇所の港に集められているように、似たような同じようなオブジェクト=データが倉庫に入れられて港に集められています。
このような倉庫の集合体のことを「シーケンス」と言います。
文字列のシーケンスについて
x = "sanfujinkainotechou"
というようなコードがあった場合、x
は変数であり、その変数 x
に19個の文字が格納されていると考えます。
これを文字列のシーケンスと言います。
Pythonの公式サイトでもシーケンスのうち文字列のテキストシーケンスのデータ型が紹介されているため、参照してください。
>> テキストシーケンス型 - Python 3.6 ドキュメント
文字列のスライス
string など文字列シーケンスだけではなく、リストなどのシーケンスでもそうです。
シーケンスでは部分部分で格納されている文字要素を抜き出すことができます。この抜き取る操作を スライス と呼びます。
ここでは、以下のようにsanfujinkainotechou で構成される文字列を使用してスライスを行なってみます。
まずはこの文字列から1文字ずつ取り出していきます。そこで注意しなければならないのが、文字列の番号は左から順に0から始まります。
逆に右から順に-1, -2, -3 と右に続いていきます。
1 2 3 4 5 6 7 8 9 10 11 | >>> x = "sanfujinkainotechou" >>> x[0] 's' >>> x[2] 'n' >>> x[8] 'k' >>> x[19] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range |
最後の x =[19] は左から数えて20番目の文字です。
しかし文字列は19文字しかないため、該当する文字がありません。
そのため Errorがでた状態になっています。
存在しない場所にある文字を指定することを" Index Error "と言います。
1 2 3 4 5 6 7 8 9 10 11 | >>> x = "sanfujinkainotechou" >>> x[-1] 'u' >>> x[-4] 'c' >>> x[18] 'u' >>> x[-18] 'a' >>> x[-19] 's' |
この様に右から -1 ,-2という順に -19 まで文字列を取り出すことができます。
特定の要素のうちの一つのみを取り出す
まずはこの文字列から1文字ずつ取り出していきます。そこで注意しなければならないのが、文字列の番号は左から順に0から始まります。
逆に右から順に-1, -2, -3 と右に続いていきます。
1 2 3 4 5 6 7 8 9 10 11 | >>> x = "sanfujinkainotechou" >>> x[0] 's' >>> x[2] 'n' >>> x[8] 'k' >>> x[19] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range |
最後の x =[19] は左から数えて20番目の文字です。しかし文字列は19文字しかないため、該当する文字がありません。
そのため Errorがでた状態になっています。
存在しない場所にある文字を指定することを" Index Error "と言います。
1 2 3 4 5 6 7 8 9 10 11 | >>> x = "sanfujinkainotechou" >>> x[-1] 'u' >>> x[-4] 'c' >>> x[18] 'u' >>> x[-18] 'a' >>> x[-19] 's' |
この様に右から -1 ,-2という順に -19 まで文字列を取り出すことができます。
部分的に文字列から取り出す
ここでは部分的に要素を取り出す必要があります。[開始:終了-1]
で要素を取り出す事ができます。
また、[:a]
とする事で、aが正の数なら a-1 以下の文字を引き出す事ができます。[:-1]
であれば右から全ての文字を引き出す事ができます。
実際に色々試してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | >>> x = "sanfujinkainotechou" >>> x[0:8] 'sanfujin' >>> x[0:9] 'sanfujink' >>> x[14:19] 'echou' >>> x[15:19] 'chou' >>> x[13:19] 'techou' >>> x[0:11] 'sanfujinkai' >>> x[:11] 'sanfujinkai' >>> x[13:] 'techou' >>> x[:19] 'sanfujinkainotechou' >>> x[:] 'sanfujinkainotechou' >>> x[:-1] 'sanfujinkainotecho' >>> x[-19:-8] 'sanfujinkai' >>> x[] File "<stdin>", line 1 x[] ^ SyntaxError: invalid syntax |
最後は x[]
でしたが、これでは何も抽出できません。
全てを抽出するときには x[:]
としましょう。
飛び飛びの文字の塊を文字列から取り出す
次に y = "123456789abcdefghij"
として文字を取得していきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> y ="123456789abcdefghij" >>> y[1:10:2] '2468a' >>> >>> y[4:16:3] '58be' >>> y[-1:-16:-2] 'jhfdb975' >>> y[::1] '123456789abcdefghij' >>> y[::-1] 'jihgfedcba987654321' >>> y[::-2] 'jhfdb97531' >>> y[::] '123456789abcdefghij' |
この様に、文字列の変数[開始:終了:飛び飛びにしたい数]
、とすれば飛び飛びで文字列を取得できます。
まとめ| シーケンスの使い方
如何でしたでしょうか。
今回は、シーケンスの概念とシーケンスのうち文字列の扱い方について解説していきました。
今回文字列で説明したスライス操作等の方法は他のシーケンスでも応用ができますので、ぜひ覚えてください。