知識のアウトプットをするブログ

なんでもブログに書き記す

【Python 2.7】文字列の操作

f:id:seisyo58:20181112173232j:plain
今回は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 '\\'
\
特殊文字\を無視したい

例えば、ディレクトリ名(C:\some\name)などを記したいとき。\nが改行として認識されるので、そんなときはrを用いる。

>>> print 'C:some\name'
C:some
ame
>>> print r'C:some\name'
C:some\name

複数行に渡る文字列

そんなときは三連のシングルクォーテーションまたはダブルクオーテーションで囲う。

>>> print """line1
... line2 hogehoge
... line3 hugahuga
... """
line1
line2 hogehoge
line3 hugahuga

文字列の計算

足し算

複数の文字列を1つに連結させることができる。

>>> "ab"+"bc"
'abbc'
>>> "ab""bc"
'abbc'
  1. を省略しても、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

3. 形式ばらない Python の紹介 — Python 2.7.15 ドキュメントより

文字列の長さを取得

len()という組み込み関数が用意されているので、それを活用する。

>>> str6 = "abcdefghijk"
>>> len(str6)
11

まとめ

Pythonの文字列は、Cなどに比べて柔軟な操作が可能なのだ。なんだけど、マイナスとか、[:]とか、出来ることが多くて、混乱しそう...

過去記事へのリンク

他のPythonの記事には以下から飛べるようにしている。
seisyo58.hatenablog.com