Pythonは文字列操作に非常に強力な機能を持っています。
参考 Pythonの特徴
文字列操作は、データの解析、ウェブスクレイピング、ファイルの操作、ユーザー入力の処理など、あらゆるプログラミングタスクにおいて不可欠なスキルです。つまり、Pythonで文字列操作を習得することは、より効率的にプログラミングを行うための重要な一歩となります。
このページでは下記のような文字列操作を自在に行えるようになることを目指します。
# 文字列の作成 hello = "こんにちは、世界!" # 文字列の連結 greeting = hello + "Pythonを学んでいます。" # 文字列のスライシング world = hello[6:8] # 文字列内での特定の文字列の検索 location = greeting.find("Python") # 文字列の大文字化 shout = hello.upper() # 文字列の分割 words = greeting.split("、")
Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
Python:文字列の作成
Pythonでは、文字列を作成するためにシングルクオート(' ')やダブルクオート(" ")を使います。また、三重引用符を使って複数行にわたる長い文字列を作成することも可能。
# シングルクオートを使用した文字列の作成 string1 = 'こんにちは、Python!' # ダブルクオートを使用した文字列の作成 string2 = "Pythonの学習を始めましょう。" # 三重引用符を使用した複数行にわたる文字列の作成 string3 = """ こんにちは、Python! Pythonの学習を始めましょう。 """
参考 Pythonの変数の基本(使い方) / 代入演算子
ここでは、string1
とstring2
の作成でシングルクオートとダブルクオートを使用しました。
シングルクオートとダブルクオートのどちらを利用するか?はPythonでは重要ではなく、好みに応じて使い分けることができます。
ただし、文字列内にクオートが含まれる場合、そのクオートが文字列の定義に使われていない方を選ぶと便利です。例えば、"Don't"のような文字列を作成する場合、シングルクオートが既に使われているので、文字列の定義にはダブルクオートを使うことが推奨されます。
# 文字列内にシングルクオートが含まれている場合、 # 文字列定義にはダブルクオートを使用 quote = "Don't forget to take a break." print(quote) # 出力:Don't forget to take a break. # 文字列内にダブルクオートが含まれている場合、 # 文字列定義にはシングルクオートを使用 advice = 'She said, "Make sure to rest."' print(advice) # 出力:She said, "Make sure to rest."
参考 print関数
この例では、quote
の中にシングルクオートが含まれているため、文字列定義にはダブルクオートを使用しています。逆に、advice
の中にダブルクオートが含まれているので、シングルクオートを使用しています。
一方、string3
の作成では三重引用符を使用しています。これは複数行にわたる長い文字列を作成するための方法です。行を変えるたびに自動的に改行文字(\n
)が挿入されます。
# 三重引用符を使用した複数行にわたる文字列の作成 string3 = """ こんにちは、Python! Pythonの学習を始めましょう。 """
したがって、Pythonではシングルクオート、ダブルクオート、そして三重引用符を使用して、様々な種類の文字列を簡単に作成することができます。これらの違いを理解し、適切な状況に応じて使い分けることが大切です。
文字列を複数行で表示させたい場合には、エスケープシーケンスを利用する方法もあります。
print("1行目\n2行目") """ 1行目 2行目 """
エスケープシーケンスもプログラミングの基礎スキルの1つです。エスケープシーケンスって何?という方は以下の記事をご覧ください。
Python:文字列の連結
Pythonにおける文字列操の基本を理解したところで、ここからは連結や置換といった様々な文字列の操作方法を解説していきます。
文字列の連結は、個々の文字列を結合して新しい文字列を作る操作です。Pythonではいくつかの方法で文字列の連結が可能です。
'+' 演算子を使った文字列の連結
最も基本的な方法は '+' 演算子を使用する方法です。Pythonでは、同じ型のデータ同士であれば '+' 演算子で連結することが可能です。したがって、文字列同士を '+' 演算子で連結することができます。
参考 「データ型」とは?
# '+' 演算子を使った文字列の連結 string1 = "Python" string2 = "プログラミング" result = string1 + "の" + string2 print(result) # 出力:Pythonのプログラミング
この例では、string1
とstring2
の間に "の" という文字列を挟んで連結しています。
文字列の連結と変数の展開:f-string
Python 3.6以降では、文字列の前に f
を付けると、その文字列内で波括弧 {}
を用いて変数の値を展開できます。これを f-string と呼びます。f-string を利用すると、変数を文字列に直接埋め込むことができ、結果として連結した文字列を得ることができます。
# f-stringを使った文字列の連結 name = "Python" version = "3.8" message = f"私は{name}のバージョン{version}を使っています。" print(message) # 出力:私はPythonのバージョン3.8を使っています。
この例では、name
とversion
という変数をf-stringを使って文字列に展開し、それらを連結しています。
f-string の利用方法は以下の記事でも詳しく解説しております。Pythonの基本となるprint関数の基本もあわせて学習できるため、初心者の方は特に必見です。
以下のように、文字列と数字などを結合しようとすると、「 TypeError: can only concatenate str (not "int") to str 」となります。
a = "私の年齢は" # 変数aは文字列 b = 100 # 変数bは数値 print(a + b)
これは、データ型の変換を行っていないため。
エラーの原因や解決方法を学びたいかたは、以下の記事をご覧ください。
'+=' 演算子を使った文字列の追加
文字列に別の文字列を追加したい場合は、+=演算子を利用します。
a = "私は" a += "Pythonを" a += "勉強して" a += "います。" print(a) # 私はPythonを勉強しています。
追加されるのは、文字列の後ろ。
つまり、文字列の先頭に別の文字列を追加するには、代入する側とされる側を逆にする等の対応が必要です。
'*' 演算子を使った文字列の繰り返し
Pythonの '*' 演算子は、文字列の繰り返しにも使うことができます。これを使うと、同じ文字列を指定した回数だけ繰り返す新しい文字列を作成することができます。
# '*' 演算子を使った文字列の繰り返し repeat = "Python! " * 3 print(repeat) # 出力:Python! Python! Python!
この例では、repeat
という文字列を3回繰り返しています。
これらの操作も含め、Pythonでは様々な方法で文字列の連結を行うことができます。これらの機能を理解し、適切に使い分けることが大切です。
文字列のインデクシングとスライシング
文字列は、Pythonではシーケンス(順序があるデータの集まり)として扱われます。
このため、文字列から特定の文字を取り出したり(インデクシング)、部分文字列を抽出したり(スライシング)することが可能です。
文字列のインデクシング
インデクシングは、文字列の特定の位置にある文字を取得するための操作です。
Pythonでは0から始まるインデックス番号を使って文字列の特定の文字にアクセスできます。つまり、1番初めの文字は「0」、2番目の文字は「1」と指定することで操作の対象とすることができます。
これはリスト(配列)と同じ考え方。
# 文字列のインデクシング string = "Pythonプログラミング" first_character = string[0] last_character = string[-1] print(first_character) # 出力:P print(last_character) # 出力:ング
この例では、string
という文字列の最初の文字(P
)と最後の文字(ング
)を取得しています。
リスト同様、マイナスのインデックスを使って文字列の末尾から逆順にアクセスすることも可能です。
# 文字列のインデクシング string = "Pythonプログラミング" first_character = string[0] # 最初の文字を取得 last_character = string[-1] # 最後の文字を取得 third_from_end = string[-3] # 最後から3番目の文字を取得 print(first_character) # 出力:P print(last_character) # 出力:ング print(third_from_end) # 出力:ミ
この例では、string
という文字列の最初の文字(P
)、最後の文字(ング
)、および最後から3番目の文字(ミ
)を取得しています。
文字列のスライシング
スライシングは、文字列の任意の部分を取得するための操作です。Pythonでは:
記号を使ってスライスを指定し、文字列から部分文字列を取り出すことができます。
# 文字列のスライシング string = "Pythonプログラミング" slice1 = string[0:6] # 最初の6文字を取得 slice2 = string[-3:] # 最後の3文字を取得 print(slice1) # 出力:Python print(slice2) # 出力:ミング
「:」は「~(から)」と同じような意味。この例では、string
という文字列から最初の6文字(Python
)と最後の3文字(ミング
)を取得しています。
また、スライシングを行う際にもマイナスのインデックスを利用することが可能です。
# 文字列のマイナスインデックス string = "Pythonプログラミング" last_character = string[-1] # 最後の1文字を取得 last_three_characters = string[-3:] # 最後から3文字を取得 print(last_character) # 出力:ング print(last_three_characters) # 出力:ラミング
マイナスのインデックスは、文字列の最後から逆順に文字を指すので、末尾近くの文字にアクセスする際に便利です。
Python:文字列の長さを取得
文字列の長さ、すなわち文字列がいくつの文字から成るかを知ることは、プログラミングの中で頻繁に行う操作です。
例えば、ユーザーが入力したパスワードが一定の長さを満たしているか確認したり、テキストデータの大きさを測定したりする場合には、文字列の長さを知ることが必要です。
Pythonではlen()
関数を使って文字列の長さを取得することができます。len()
関数は、引数に指定されたシーケンス(文字列、リスト、タプルなど)の要素の数を返します。
# 文字列の長さを取得 string = "Pythonプログラミング" length = len(string) print(length) # 出力:14
参考 len関数の使い方
この例では、string
という文字列の長さをlen()
関数を使って取得しています。string
は14文字から成るため、len(string)
の結果は14になります。
文字列の長さを知ることで、テキストデータをより深く理解し、必要に応じて適切な操作を行うことが可能になります。
文字列の変更不可能性
ここで、pythonの文字列の重要な特性について解説します。
Pythonの文字列は「不変」(immutable)です。これは一度作成された文字列は変更できないということを意味します。
つまり、文字列の特定の文字を直接書き換えるような操作はできません。これはPythonの文字列が他のプログラミング言語の文字列とは異なる特性であり、これを理解することは非常に重要です。
例えば「abcdef」という文字列を部分的に書き換えて「abc123」とすることはできないということ。
string = "abcdef" # string[3:] = "123" # TypeError: 'str' object does not support item assignment
このコードは、文字列 "abcdef" の末尾の3文字を "123" に変更しようとしていますが、Pythonは文字列の直接変更を許可しないため、TypeErrorが発生します。
では、どうすれば部分的に文字列を「変更」できるのでしょうか?それは新しい文字列を作成することで達成します。これはスライシングや連結などの操作を用いて行うことができます。
string = "abcdef" new_string = string[:3] + "123" print(new_string) # 出力:abc123
この例では、元の文字列の最初の3文字を取り出した部分文字列を作成し(string[:3]
)、それに新しい末尾の文字列 "123" を連結して新しい文字列を作成しています。これにより、部分的に文字列を「変更」したかのような結果を得ることができます。
ひとまず、ここではPythonの文字列は不変であるというポイントを押さえておいてください。
【応用編】Pythonの文字列メソッド
Pythonでは変数もオブジェクトの1つです。そのため文字型の変数を定義した時点で様々なメソッドを利用することが可能になります。
この章では、文字列操作のメソッドの中で覚えておきたい必須メソッドを解説していきます。
python:findメソッド
find
メソッドは、文字列の中から特定の部分文字列を検索し、その最初の出現位置のインデックスを返します。部分文字列が見つからない場合は-1を返します。
string = "Pythonプログラミング" position = string.find("プログラミング") print(position) # 出力:6
ここでfind("プログラミング")
と指定しているため、文字列 "Pythonプログラミング" における "プログラミング" の始まる位置、つまりインデックス 6 が出力されます。
Python:upperメソッド/lowerメソッド
upper
メソッドは文字列中の全ての文字を大文字に変換します。逆にlower
メソッドは全ての文字を小文字に変換します。
string = "Pythonプログラミング" upper_case_string = string.upper() lower_case_string = string.lower() print(upper_case_string) # 出力:PYTHONプログラミング print(lower_case_string) # 出力:pythonプログラミング
upperメソッド/lowerメソッドは、日本語の文字列に対しては無効です。
a = 'あいうえお' print(a.upper()) # あいうえお
a = 'ABCabcあいうえお' print(a.lower()) # abcabcあいうえお
Python:replaceメソッド
replace
メソッドは、文字列内の特定の部分文字列全てを別の文字列に置き換えます。
第一引数に置き換えられる部分文字列、第二引数に置き換える文字列を指定します。
string = "Pythonプログラミング" replaced_string = string.replace("Python", "Java") print(replaced_string) # 出力:Javaプログラミング
ここで重要なポイントはreplaceメソッドは、あくまでも置換した文字列を別の変数に格納するという処理を行っているという点です。
もとの変数stringの文字列は置換されないという点に注意しましょう。
Python:splitメソッド
split
メソッドは、特定の区切り文字を指定して文字列を分割し、その結果をリストとして返します。区切り文字は引数に指定します。
string = "Python,Java,C++,Ruby" splitted_string = string.split(",") print(splitted_string) # 出力:['Python', 'Java', 'C++', 'Ruby']
この例では、文字列 "Python,Java,C++,Ruby" をカンマ "," を基に分割しています。その結果、各プログラミング言語の名前が要素となったリストが生成されます。
Python:formatメソッド
formatメソッドを利用することで、文字列を別の文字列オブジェクトに埋め込むことができます。
ame = "山田太郎" job = "エンジニア" text = "{0}は、{1}です。" print(text.format(name,job)) # 山田太郎は、エンジニアです。
予め文字列の中に引数を「{}」で埋め込んでおくだけ。
formatメソッドでは、その引数に渡す内容を定義するだけです。変数でも文字列を直接埋め込む方法でもどちらでもOK。したがって以下のような書き方も可能です。
text = "{0}は、{1}です。" print(text.format("山田太郎","エンジニア")) # 山田太郎は、エンジニアです。
formatメソッドの使い方をさらに詳しく学習したい方は以下の記事をご覧ください。
Pythonを1から学習したい方は
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!