sagantaf-佐賀んタフ-

なんでも自分の思ったこと、経験したことを書いて生きます。

【Python3入門まとめ】3.文字列

 

要約

 

文字列

・文字列はダブルクオート( “ )もしくはシングルクオート( ' )で囲む
エスケープ処理は¥もしくは\をつかうか、” と ’ を組み合わせることで可能
・改行とタブは\nと\tで実現可能
・文字列の結合、繰り返し、抽出は、+、*、をつかう
はスライス処理といい、[2:4:2]、[:-1:2]といった使い方が可能
 
 
 

詳細と実行例

(具体例の中の赤字は、説明です。実際に打ち込むコマンドではありません。)
 
 
超基本
ダブルクオート( “ )もしくはシングルクオート( ' )で囲むと文字列として扱われる。
>>> "hello"
'hello'
>>> 'hello'
'hello'
>>>
>>> a = “hello"
>>> a
'hello'
>>> print(a)
hello
 
  
クオートが無い場合は変数として判断され、宣言していないのでエラーになる。
>>> hello
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'hello' is not defined
>>> 
 
 
 
スケープ文字を入れて記号や改行を文字列に入れる
文字列の中でダブルクオート( “ )もしくはシングルクオート( ' )を利用したい場合は、¥もしくは\エスケープする。’を使いたいときは、”で文字を囲む、といった方法でもエスケープ可能。
>>> 'I'm Japanese.'
  File "<stdin>", line 1
    'I'm Japanese.'
       ^
SyntaxError: invalid syntax
>>>
>>> 'I\'m Japanese.’     ←コードの中にあると、少し読みにくくなってしまう。
"I'm Japanese."
>>>
>>> "I'm Japanese.”     ←”と’を組み合わせることで、見え方がそのままになり読みやすい。
"I'm Japanese."
>>> 'This is "Sushi"!'
'This is "Sushi"!'
>>> 
 
コードが長くなってくると、ひとつひとつの読みやすさ、理解のしやすさは重要になってくる。その点で、文字列宣言において”と’のどちらも利用できるようになっているのは、Pythonのとても便利な点。 
 
 
 
文字列の中に改行を入れたい場合は、\nを利用するか、””"で文字列を囲めばよい。
>>> x = "line1\nline2\nline3"
>>> print(x)
line1
line2
line3
>>> 
>>> y = """abc
... efg
... hij"""
>>> print(y)     ←print関数だと\nが改行として処理される
abc
efg
hij
>>> y     ←一方で自動エコー機能を使うと、\nはそのまま表示される
‘abc\nefg\nhij 
 
 
 
タブを入れたい場合は、\tを利用する。
>>> print("abc\tefg”)
abc    efg
 
 
いちいちエスケープをつけるのが面倒な場合は、文字列を表現する前にrをつけることで、エスケープ不要になる。 
>>> path = r"C:\home\name"
>>> print(path)
C:\home\name
>>>
 
 
 
文字列をいろいろいじる(結合、繰り返し、抽出)
文字列を結合するには、+をつかう。
>>> s1 = "hello"
>>> s2 = "world"
>>> s1 + s2
'helloworld'
 
 
繰り返し表示するには、*をつかう。
>>> "hello " *10
'hello hello hello hello hello hello hello hello hello hello '
>>>
>>> 2 * “Hi”     ←前後どちらに数値をもってきてもOK
‘HiHi'
 
 
 
文字列は[]を使って抽出できる。(スライス処理)
>>> s = "String"
>>> s[0]
'S'
>>> s[3]
‘i'
 
 
マイナスをつけると文字列の後ろから数えて抽出してくれる。 
>>> s = "qwertyuiopasdfghjkl"
>>> s[-3]
'j'
>>> s[-0]     ←[-0]は[0]と同じと判断される。
‘q'
>>> s[-1]     ←一番後ろの文字を抽出したい時は[-1]となることに注意。
'l'
 
  
マイナスをつかうことで、なが〜い文字列のときに文字数を数える手間が省ける。
(真ん中の方の文字を抽出したいときは数えないといけないけど…。簡単な文字数の表示方法は後述)
 
 
[X:Y:Z]で位置を利用した表現もできる。
これは、”X以上Y未満の数値をZステップで文字列をとりだす”という意味をあらわす。
ステップ数とは、飛び飛びに値を抽出することを意味する。2つ飛びにとか5つ飛びにとか。
>>> s = "abcdef"
>>> s[0:3]
‘abc'
>>> s[2:-2]
'cd'
>>> s[0:5:2]     ←ひたつ飛びなので、0番目・2番目・4番目の文字列を取り出し
'ace'
 
 
X、Y、Zはそれぞれ省略できる。
XとYは省略したら、最初からもしくは最後までと判断される。
>>> s = "abcdef"
>>> s[:4]     ←最初から3番目までの文字列をひとつ飛びに取り出す
'abcd'
>>> s[4:]    ←4番目から最後までの文字列をひとつ飛びに取り出す
‘ef'
>>> s[:]     ←最初から最後までの文字列をひとつ飛びに取り出す=そのまま表示(つかう機会はない…)
'abcdef'
>>> 
 
 
 
ステップに−1を指定した場合、文字列を逆から順に取り出していくことになるので、文字列を反転できる。
>>> s
'abcdef'
>>> s[::-1]
'fedcba'
>>> 
 
 
文字列検索
in を使うことでbool型としてTrueもしくはFalseの判定をしてくれる。
このとき、大文字小文字の区別までしてくれる。
>>> "e" in "Hello"
True
>>> type("e" in "Hello")
<type 'bool’>     ←タイプがboolになっていることがわかる
>>> 
>>> "world" in "hello world"
True
>>> "world" in "hello World"
False
 
文字列検索に利用することができる。