『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

現場で使える Django の教科書《基礎編》

新品価格
¥1,728から
(2019/8/21 23:36時点)

文字列(str)

【Python】文字列(str)

Pythonでは文字列型データはシングルクォーテーション(’)あるいはダブルクォーテーション(”)で囲むという約束事があります。

# PYTHON_STRING

# In[1]

my_str = "Pythonは楽しい"
print(type(my_str))
# <class 'str'>

一般的には、どちらの引用符を使用しても文字列を作成することができますが、コード内で引用符を含む文字列を作成する場合には、使っていない引用符で文字列を囲みます。たとえば、ダブルクォーテーションを含む文字列を作成する場合は、シングルクォーテーションで囲みます。

# In[2]

my_string = 'He said, "Hello, world!"'
print(my_string)
# He said, "Hello, world!"

逆にシングルクォーテーションを含む文字列を作成したい時は、ダブルクォーテーションで全体を囲みます。

# In[3]

my_string = "She said, 'Hello, world!'"
print(my_string)
# She said, 'Hello, world!'

IDLE、VSCode、Jupyter NoteBook、Google Colab など、ほとんどの開発環境では、シンタックスカラー機能がはたらいて、文字列や関数、演算子などはそれぞれ色分けされるので、どの部分が文字列なのかひと目でわかるようになっています。

特定文字列の参照

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'

文字列のスライス

次の構文で文字列を任意の位置でスライスできます。

str[開始インデックス : 終了インデックス + 1]

文字列は immutable なオブジェクト なので、スライスによってもとのオブジェクトは変更されずに、新しい str 型オブジェクトが返されます。以下のコードで動作を確認してください。

# PYTHON_STRING_SLICING

# In[1]

my_str = "ABCDEFG"

# インデックス0 ~3を切り出す
x = my_str[0:4]

print(x)
# 'ABCD'

# In[2]

# インデックス3以降をすべて切り出す
x = my_str[3::]

print(x)
# 'DEFG'

# In[3]

# インデックス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()

str.center() は文字列を中央寄せします。

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()

str.rjust() は文字列を右寄せします。

str.rjust(全体の幅 [, 埋める文字])
# PYTHON_STRING_RIGHT

# In[1]

my_str = "数理計画法"

# 文字列を右寄せ
str_1 = my_str.rjust(12, "△")

print(str_1)
# △△△△△△△数理計画法

str.ljust()

str.ljust() は文字列を左寄せします。

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 という浮動小数点数型数値を意味しています。

コメント

  1. あとりえこばと より:

    【お知らせ】旧式コードナンバーを Jupyter Notebook 用に書き直しました。

  2. あとりえこばと より:

    【AI連載小説】羽村陽子のプログラミング日記(6)
     
    陽子はPythonの基礎を学ぶ冒険を続けていた。ある日、彼女は文字列の扱い方に興味を持ち、デスクに広げた書籍と共に文字列に関する様々なサンプルコードを調べていた。しかし、文字列の操作に四苦八苦しているのが伝わってくるような様子だった。

    同僚たちは陽子の苦戦ぶりを見て、助けを求めるように声をかけた。
    「陽子、何か難しいことにぶつかったの?」
    陽子は少し戸惑った表情で答えた。
    「ええ、文字列の扱い方が難しくて…。」
    橋本が優しく教えてくれた。
    「文字列はPythonでとても重要なデータ型だよ。例えば、文字列の結合やスライス、置換など、たくさんの操作ができるんだ」
    陽子は橋本のサポートを受けながら、本を見返し、文字列を結合する方法を理解しようとした。

    # 文字列の結合
    greeting = "こんにちは"
    name = "陽子"
    message = greeting + name
    print(message)

    しかし、次に進むとなると、スライスや置換の概念が理解しきれずに戸惑ってしまった。橋本は細かいところまでわかりやすく説明してくれたが、陽子はまだ手ごわいようすだった。
    「これがスライスだよ。文字列を一部切り取ることができるんだ。」
    橋本がデモンストレーションとして説明するも、陽子は不安そうな表情を浮かべた。
    同僚たちは微笑みながら、
    「大丈夫だよ、陽子。最初はみんな戸惑うこともあるし、ゆっくり慣れていけばいいんだから
    と声をかけた。彼らのサポートに支えられながら、陽子は少しずつ文字列の操作に慣れ、Pythonの奥深さを垣間見るようになっていくのであった。