文字列 (str型オブジェクト)
Python では 文字列型データ (strクラスのオブジェクト) はシングルクォート (') あるいはダブルクォート (") で囲むという約束事があります。念のためにデータ型を type() 関数で調べてみます。
# PYTHON_STRING
# In[1]
my_str = "Pythonは楽しい"
print(type(my_str))
<class 'str'>
このサイトでは、文字列は基本的にダブルクォートで囲うことにします。
Jupyter NoteBook を使用している場合は、シンタックスカラー機能がはたらいて、文字列や関数、演算子などはそれぞれ色分けされます。他のエディターにも似たような機能があるはずなので、どの部分が文字列なのかひと目でわかるようになっています。
特定文字列の参照
Python における 文字列 (str クラスのオブジェクト) は テキストシーケンス に分類されます。文字列を構成するひとつひとつの文字(要素)には 0 から始まるインデックスが割り当てられます。たとえば "Python" という文字列を定義した場合、P に 0, y に 1, t に 2, ...... が割り当てられ、インデックス番号を指定することで、特定の文字が取り出せるようになっています。
# PYTHON_STRING_INDICES
# In[1]
# 文字列の定義
my_str = "Python"
# インデックス3の値を取り出します
x = my_str[3]
print(x)
'h'
文字列のスライス
次の構文で文字列を任意の位置でスライスできます。
文字列は immutable なオブジェクト なので、スライスによってもとのオブジェクトは変更されずに、新しい str 型オブジェクトが返されます。以下のコードで動作を確認してください。
# PYTHON_STRING_SLICING
# In[1]
my_str = "ABCDEFG"
# インデックス0 ~3を切り出します
x = my_str[0:4]
print(x)
'ABCD'
# In[2]
my_str = "ABCDEFG"
# インデックス3以降をすべて切り出します
x = my_str[3::]
print(x)
'DEFG'
# In[3]
my_str = "ABCDEFG"
# インデックス0 から1文字ずつ飛ばしながら切り出します
x = my_str[::2]
print(x)
'ACEG'
文字列の連結
文字列同士を連結 するときは 算術演算子 の「 + 」を使います。
# PYTHON_STRING_JOIN
# In[1]
mystr1 = "今日は日曜日。"
mystr2 = "どこかに遊びに行きたいな。"
print(mystr1 + mystr2)
今日は日曜日。どこかに遊びに行きたいな。
掛け算「 * 」を文字列に作用させることもできます。
# In[2]
mystr = "Pythonは楽しいな♪ "
print(mystr*3)
Pythonは楽しいな♪ Pythonは楽しいな♪ Pythonは楽しいな♪
このように文字列を 3 倍すると、3 回同じ言葉を繰り返します。
文字列の中央寄せ・右寄せ・左寄せ
str.center() は文字列を中央寄せします。
# PYTHON_STRING_CENTER
# In[1]
my_str = "サイバーセキュリティ"
# 文字列を中央寄せ
str_1 = my_str.center(15, "x")
str_2 = my_str.center(20, "□")
print(str_1)
print(str_2)
xxxサイバーセキュリティxx □□□□□サイバーセキュリティ□□□□□
str.rjust() は文字列を右寄せします。
# PYTHON_STRING_RIGHT
# In[1]
my_str = "数理計画法"
# 文字列を右寄せ
str_1 = my_str.rjust(12, "△")
print(str_1)
△△△△△△△数理計画法
str.ljust() は文字列を左寄せします。
# PYTHON_STRING_LEFT
# In[1]
my_str = "画像解析"
# 文字列を左寄せ
str_1 = my_str.ljust(12, "〇")
print(str_1)
画像解析〇〇〇〇〇〇〇〇
数値型を文字列型に変換
Python では異なる型同士の連結は認められていません。内部で上手いこと処理して勝手にやってくれるような言語もあるのですが、Python では設計したソフトの誤作動を未然に防ぐために厳密なルールが適用されています。しかし、科学の世界では数値に単位を添えるなど、数値と文字列を合わせて表示したいケースはよくあります。そのようなときには str() 関数を使って数値を文字列に変換 します。例として木星と地球の質量比を計算するプログラムを書いてみます。# が添えてある行はコメント行で、プログラムとは関係のない部分です。
# PYTHON_NUMERICAL_STRING
# In[1]
#木星の質量
mass_J = 1898e24
#地球の質量 (kg)
mass_E = 5.972e24
#木星と地球の質量比を計算 (kg)
mass_ratio_JE = int(mass_J / mass_E)
#質量比を添えて出力
print("木星の質量は地球の" + str(mass_ratio_JE) + "倍です")
木星の質量は地球の 317 倍です
上のコードでは、木星と地球の質量を数値で与えて比を計算させ、int() 関数で小数部分を切り捨てた値を mass_ratio_JE という名前の変数に入れて、それを文字と連結させて出力しています。最後の行でうっかり str() による変換を忘れて
print("木星の質量は地球の" + mass_ratio_JE + "倍です")
と書いてしまうとエラーが表示されます。
[補足] 5.972e24 は 5.972 × 1024 という浮動小数点数型数値を意味しています。
【お知らせ】
旧式コードナンバーを Jupyter Notebook 用に書き直しました。