【Python 2.7】文字列の操作
今回はPythonの文字列について。
基本的な書き方
シングルクォーテーションとダブルクオーテーション
Pythonではシングルクォーテーションとダブルクオーテーションに違いがない。
>>> 'aaa' #文字列は「aaa」 'aaa' >>> "aaa" #文字列は「aaa」 'aaa'
一番最初のシングルクォーテーションから、次のシングルクォーテーションまでが文字列として認識される。ダブルクオーテーションでも同様だ。
>>> "abc'" #文字列は「abc'」 "abc'" >>> "'abc'" #文字列は「'abc'」 "'abc'" >>> '"hello"' #文字列は「"hello"」(ダブルクオーテーションも文字列の一部) '"hello"' >>> '"""""abc"""""' #文字列は「"""""abc"""""」 '"""""abc"""""'
出力
対話型では、文字列をただ書けば、それが出力されたが、ファイルに書いてそれを実行するときには、printを用いる。
>>> print 'abc' abc
特殊文字\
\は、特殊な文字で、それを付加することで様々なことができる。
シングルクォーテーションを意味のないものにする。
例えば、「a'」という文字列を持ちたいとき、次のように書くとエラーを吐く
>>> 'a'' File "<stdin>", line 1 'a'' ^ SyntaxError: EOL while scanning string literal
そう。'a'で文字列が完成しているので、その後のシングルクォーテーションがエラーを吐く。次のように書くといい。
>>> 'a\'' "a'"
真ん中のシングルクォーテーションを意味のないものにしたので、「a'」という文字列が完成した。ダブルクオーテーションでも同様だ。
改行やタブ開けをする
>>> print 'ab\nc' ab c >>> print 'ab\tc' ab c
これらはエスケープシーケンスといって、コレ以外にも様々なものがある。
このサイト(エスケープシーケンス - 文字列 - Python入門)などを参考にしてみてほしい。
\を出力したい
そんなときは以下のように書けばいい
>>> print '\\' \
複数行に渡る文字列
そんなときは三連のシングルクォーテーションまたはダブルクオーテーションで囲う。
>>> print """line1 ... line2 hogehoge ... line3 hugahuga ... """ line1 line2 hogehoge line3 hugahuga
文字列の計算
足し算
複数の文字列を1つに連結させることができる。
>>> "ab"+"bc" 'abbc' >>> "ab""bc" 'abbc'
- を省略しても、1つに連結してくれる。が、しかし!変数と文字列は+が絶対に必要だ
>>> str1 = "ab" >>> str1"bc" File "<stdin>", line 1 str1"bc" ^ SyntaxError: invalid syntax >>> str1+"bc" 'abbc'
掛け算
文字列を繰り返す事ができる。
>>> "abc"*3 'abcabcabc' >>> "abc"*3 + "cde" 'abcabcabccde' >>> ("abc"+"cde")*3 'abccdeabccdeabccde'
文字列?配列?
誤解を恐れずに言うのなら、文字列は配列のように扱える。
>>> str1 = "abcde" >>> str1[0] 'a' >>> str1[1] 'b' >>> str1[2] 'c' >>> str1[3] 'd' >>> str1[4] 'e'
また、負の数を指定することで、後ろからになる。
>>> str1 = "abcde" >>> str1[-1] 'e' >>> str1[-2] 'd' >>> str1[-3] 'c' >>> str1[-4] 'b' >>> str1[-5] 'a' >>> str1[-0] 'a'
0と-0は同じなので、そこだけ注意が必要だ。
また、x番目からy番目の文字も指定できる。
>>> str3 = "abcde" >>> str3[0:5] 'abcde' >>> str3[2:5] 'cde' >>> str3[2:4] 'cd'
注意として、str3[x:y]とすると、x番目から、y番目の一個手前までになる。つまり、y番目の文字は含まれないのだ。
これは、xとyを両方指定する必要はなく、どちらか、もしくはどちらも省略できる。
>>> str4 = "abcde" >>> str4[:] #最初から最後まで 'abcde' >>> str4[2:] #2から最後まで 'cde' >>> str4[:4] #4の手前まで 'abcd'
もちろん、ここに負の値を設定することも可能。
>>> str5 = "abcde" >>> str5[:-2] #最初から(最後から-2)番目の手前まで 'abc' >>> str5[-4:] #(最後から-4)番目から最後まで 'bcde'
このサイト(3. 形式ばらない Python の紹介 — Python 2.7.15 ドキュメント)にわかりやすい図があったので掲載
+---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
文字列の長さを取得
len()という組み込み関数が用意されているので、それを活用する。
>>> str6 = "abcdefghijk" >>> len(str6) 11
まとめ
Pythonの文字列は、Cなどに比べて柔軟な操作が可能なのだ。なんだけど、マイナスとか、[:]とか、出来ることが多くて、混乱しそう...
過去記事へのリンク
他のPythonの記事には以下から飛べるようにしている。
seisyo58.hatenablog.com