Pythonに限らず、プログラミングでは文字列の操作は重要な要素です。
文字列操作は、主に出力やデータ収集関係のために使用されます。
Pythonは、文字列で作成したオブジェクトはイミュータブルとして扱われるため、サクッとした変更がききません。
[memo title=”イミュータブル”]状態を変更できないオブジェクトのことです。対義語はミュータブル。[/memo]
そのかわりに、文字列の一部を抜き取ったり、抜き取った文字列に別の文字列を足して変数に格納することができます。
[box class=”box33″ title=”こんな人にオススメ”]
[list class=”li-check li-mainbdr main-c-before”]
- Pythonの文字列操作を知りたい方
- Pythonではどんなことが出来るのかを知りたい方
[/list][/box]
文字列で重要なこと
文字列を取り扱う上で、まずはじめに覚えておかなければならないことがあります。
これを覚えておかないと、絶対失敗します!
\(バックスラッシュ)におけるエスケープ処理
エスケープ処理とは、次の文字をプログラムとして処理しないことを言います。
c="She said,"We leave here in forty seconds!""
#40秒で支度しな!
これではエラーを起こしてしまいます。
プログラムでは"She said,"
以降のWe leave here in forty seconds!""
を何らかのプログラム処理として認識してしまうためです。
c="She said,\"We leave here in forty seconds!\""
#40秒で支度しな!
こうすればエラーにはなりません。
[memo title=”MEMO”]日本語キーボードでは「¥」を入力すると「\」が出力されます。[/memo]
「\」はバックスラッシュという記号で、PythonだけでなくPHPなどでもエスケープ処理に使用されます。
文字列を変数に入れる
通常、文字列や数字などのリテラルは変数に代入し使用します。
bba="She said,We leave here in forty seconds!"
数値の代入にはクォーテーションで囲む必要がありませんが、文字列に関しては必ず囲まなくてはいけません。
文字列を囲む場合は、「”」でも「’」でも問題ありません。
エスケープ処理を好まない場合は、「”」と「’」を使い分けると便利です。
bba='She said,"We leave here in forty seconds!"'
こんな感じですね。
トリプルクォーティング
Pythonでは、トリプルクォーティングという文字列の代入方法があります。「”’」や「”””」のように3つのクォーテーションで囲む方法です。
これは、複数行を代入したい場合などに使用します。
bba='''She said,"We leave here in forty seconds!"
by "Castle in the Sky"'''
このような感じに使用します。
また、bba
をIDLEで出力させると、'She said,"We leave here in forty seconds!"\nby "Castle in the Sky"'
と出力されます。
~ seconds!"\nby ~
にある\nは「ここで改行してあるよ」という記号です。
数値を文字列に変更する
bba=100
bba= str(bba)
このコードはbba
という変数に100
という数字を代入し、そのbba
に入っている数字を文字列に変更した例になります。
これを実行すると、bba
は'100'
という実行結果を得られます。
コーテーションで囲われているので文字列だということがわかっていただけるかと思います。
文字列の連結と繰り返し
文字列の連結や繰り返しって何でしょう?
連結とは+演算子を使用し、文字を連結させることです。
b = "40秒"
b2 = "で"
a = "支度しな"
print( b + b2 + a)
bとb2とaを合わせると、結果は「40秒で支度しな」と出力されます。
これが文字列の連結です。
繰り返しは、*演算子を使用し文字列を繰り返します。
pazu = "バル"
syta = "ス!"
musca = "なにぃいい!?"
effect = "ゴ"
print (pazu + syta)
print (musca)
print (effect * 20)
実行結果はご察しのとおりです。
文字列長さの取得と抽出
PythonはAIが得意なプログラミング言語です。
自動返答ロボットを作る際に文字列の長さを取得し、多ければさらに細分化という場面において使われます。
musca = "見ろ!まるで人がゴミのようだっ!"
len(musca)
これの出力結果は16なので、16文字使用しているということになります。
文字列を抽出する場合は、[]を使用します。
musca = "見ろ!まるで人がゴミのようだっ!"
musca[0]
とした場合、実行結果は’見’になります。
変数に代入した場合の16文字は0~15の16文字だからです。
musca[-4]
この場合、実行結果は’う’になります。
-演算子を使用することで、逆から何文字目という指定に変わるためです。
文字列の分割
pazu = "どうやら人間みたいだ。さっきまで、ひょっとすると天使じゃないかって、心配してたんだ"
pazu.split('、')
これを実行した結果がこちら。
['どうやら人間みたいだ。さっきまで', 'ひょっとすると天使じゃないかって', '心配してたんだ']
「、」で区切って’どうやら人間みたいだ。さっきまで’と’ひょっとすると天使じゃないかって’と’心配してたんだ’に分割されました。
また、この分割を使用して配列に格納できます。
pazu = "どうやら人間みたいだ。さっきまで、ひょっとすると天使じゃないかって、心配してたんだ"
serif = pazu.split('、')
print (serif[0])
この実行結果はこうなります。
‘どうやら人間みたいだ。さっきまで’
非常に使い勝手が良いですね。
文字列の結合
分割とは逆に結合します。
連結とはどう違うのかを見てみましょう。
pazu = "どうやら人間みたいだ。さっきまで、ひょっとすると天使じゃないかって、心配してたんだ"
serif = pazu.split('、')
renketsu = serif[0] + serif[1] + serif[2] #連結#
str_join ="、".join(serif) #結合#
print ('連結は',renketsu)
print ('結合は',str_join)
これを実行すると、こうなります。
連結は どうやら人間みたいだ。さっきまでひょっとすると天使じゃないかって心配してたんだ
結合は どうやら人間みたいだ。さっきまで、ひょっとすると天使じゃないかって、心配してたんだ
「、」の位置に注目してください。
連結では「、」がない状態で連結されたのに対し、結合では「、」で区切って結合されています。
連結と結合の違いもおわかりいただけたかと思います。
まとめ
Pythonの文字列操作は非常に多く1回で説明できるものではありません。
また、この文字列操作は「str(文字列関数)が持つクラス」になります。
「Pythonは全てがオブジェクトであり、クラスはオブジェクトの設計図である」ことは以前記事にしたとおりです。
当然ながら文字列が代入してある変数もオブジェクトです。
クラスがオブジェクトを作っていく過程を意識しながら読んでいただくことで「Pythonは全てがオブジェクトであり、クラスはオブジェクトの設計図である」ことも理解しやすいのではないかと思います。
[say name=”シゲ” img=”http://conayuki-labo.tech/wp-content/uploads/2019/02/10-2-1-e1551287082977.jpg”]この文字列、後から使うかも知れへんし変更して違う変数にいれとこ。[/say]
[say name=”カミ” img=”http://conayuki-labo.tech/wp-content/uploads/2019/02/73-1-e1551287234652.jpg” from=”right”]お!?オブジェクト指向やな!?[/say]
また【その2】を記事にしたいと思っていますので、その際は是非、また見に来ていただければと思います。
最後までお読みいただきありがとうございました。