見出し画像

[初心者向け]Python基礎《文字列》

こんにちは。
普段趣味としてプログラミングをぼちぼちやってます。

今回はPythonの文字列という事で初心者の方に分かりやすく基礎的な部分を出来るだけ噛み砕いてお伝え出来ればなと思っています。

プログラミングに興味がある人、業務を自動化したい!という人など、そういった誰かの役に立てれば良いなと思います。

では、さっそく文字列とは何か?というところを見ていきましょう。

文字列とは

まずは文字列という言葉を解いていきましょう。
単語としては『文字』と『列』で、それらが組み合わさって『文字列』となっています。

なので文字列は単純に、文字の連なりだという事がわかります。

ただ単に文字というと『み』とか『か』とか『ん』とかそういった一文字の事を指します。
そしてそれらが連なって『みかん』という一つの文字列として、また単語として認識されるようになります。

プログラムでの文字列も同じように文字の連なりが文字列として扱われています。
また、一文字だったとしても文字列型として扱われますし、何も文字がない空文字列と呼ばれるものも文字列型として扱われます。

そして文字列は変更不可能(イミュータブルという)なオブジェクトなので一度文字列を作ると内容を変更できません。
新たに別の文字列を作ったり、コピーしたりといった操作が必要になります。
後ほど説明する文字列の操作では、文字列を変更しているかのように見えますが、新たに別の文字列を作成して返しているだけなので注意が必要です。

character string(文字列)
character(キャラクター)は『文字』
string(ストリング)は『列や連なり』
という意味を持ちます。

以上を踏まえて実際に文字列に触れてみましょう。

プログラムでの文字列に触れてみる

以下のようにシングルクォーテーション又はダブルクォーテーションで囲むことでプログラム内で文字列として扱う事が出来る様になります。
対話モードで以下のようにクォーテーションで括った文字列を入力してエンターしてみましょう。

>>'character string'
'character string'
>>"character string"
'character string'

出力として「character string」という文字列が表示されたと思います。

シングルクォーテーションとダブルクォーテーションの違いですが、特にどっちを使わないといけないとかは無いので好きな方で大丈夫です。
これは人によって好みがあるみたいですね。

僕は文字列を使う時は基本的にダブルクォーテーションで括っています。

また、クォーテーションを3つ連ねたもので囲うと、複数行に渡って入力する事も可能です。
その場合、出力される文字列も改行のための「\n」というエスケープ文字が改行部分に付加されます。

>>> '''hello
... world'''
'hello\nworld'
>>> """hello
... japan"""
'hello\njapan'
>>> print("""hello
... python""")
hello
python

Pythonの組み込み関数であるprint関数を使えば改行文字を整形した形で出力されます。
対話モードではなく、プログラムファイルを実行した時にコマンドプロンプトやターミナルなどに何か文字列を出力させる場合は、このprint関数を使います。

このエスケープ文字というものですが、文字列の中で特殊な文字などを表現する為に用いられます。
例えば先程の改行だと「\n」になりますし、タブを表現する場合は「\t」を入れたりします。

他にも色々とエスケープ文字があるので気になったら調べてみてください!この記事では深追いしません。

文字列のインデックス指定・スライス

プログラムでは文字列の任意の部分を抽出したりする事ができます。
抽出方法の1つであるスライスという方法を使うと文字列からある特定の部分を抽出したりすることができます。

まず基本的なインデックス(添字)による文字列の中の1文字を取り出す方法から順に見ていきます。

>>> string = "hello python"
>>> string[0]
'h'
>>> string[1]
'e'
>>> string[6]
'p'

まず変数stringに文字列『hello python』を入れました。
そのあと変数名と角括弧で、角括弧の中には数値を入れています。
この角括弧の中の数値はインデックス「index(添字)』と言って、インデックスで指定した番号に対応する値を抽出する事ができます。

文字列や、今後出てくるリスト、タプルなどのイテレーター(繰り返し処理が可能なオブジェクト)と呼ばれる要素から任意のインデックスの値を取り出したい時はこの様に変数名[index]という形で取り出す事ができます。

名称未設定

ここで重要なのが、プログラムでインデックス(添字)で指定する要素の先頭は『0』から始まるという決まりです。
なので先程のコードでstring[0]の出力が、変数stringに格納されている文字列の1番先頭の文字である『h』となりました。

string[1]は、先頭から2番目の文字なので『e』となります。

この先頭が0なのがややこしいですが、どうしようもないので覚える+慣れるしか方法はありません。

空白(スペース)もプログラムでは1文字としてカウントされることにも注意しないといけません。

そしてスライスと呼ばれる方法を使うと文字列やリストなどから指定した長さで要素を取得する事ができます。

変数名[開始index:終了index]といった書き方をします。
実際にやってみた方が分かりやすいと思うので対話モードで見ていきましょう。

先程の画像も一緒に見ながら考えるとわかりやすいかもしれません。

>>> string = "hello python"
>>> string[3:7]
'lo p'
>>> string[6:]
'python'
>>> string[:5]
'hello'
>>> string[:]
'hello python'

名称未設定

string[3:7]では変数stringのindexが3〜6までの文字列。

string[6:]では変数stringのindexが6〜最後までの文字列。
終了indexを省略すると開始indexから最後の要素までを取得します

string[:5]では変数stringの最初〜index4までの文字列。
開始indexを省略すると最初から終了index-1までの要素を取得します。

終了indexを指定する時に「終了index-1」 になるのが少しややこしいですが、ここは慣れだと思うので頑張って覚えてください。
例えばですが、終了インデックスは「n個目の値」を指定する。というような覚え方をしてもいいかもしれません。

先程のstring[3:7]の出力は'lo p'でした。
以下の画像を見ながら考えてみると、開始インデックスは「index」で指定して、終了インデックスは「n個目」で指定すると目的のlo pを抽出する事ができます。

名称未設定1

それかstring[3:7]の時、開始はindex3から始まって、終了で指定した7から開始indexの3引いた数だけデータを抽出する。
string[3:7]で考えると7-3=4なので
開始index3から4個分のデータを抽出する。というようなイメージですね。

あくまでこれは例えなのでややこしいなと思ったら、是非あなたのわかりやすい覚え方を考えてみてください。

文字列の分割・結合・繰り返し

Pythonでは文字列型のメソッドや算術演算子を使って文字列を分割したり結合したり繰り返したりといった文字列の操作をする事ができます。

ただ冒頭でも少し触れましたが文字列は変更不可能なので、操作後の状態を保持しておきたい場合は別の変数に代入するなどの処理が必要になってくるので注意してください。

まずは分割からいきましょう。

文字列の分割

文字列の分割はsplit()を使います。

>>> string = "Hello python! My name is Anaconda"
>>> string
'Hello python! My name is Anaconda'
>>> string.split()
['Hello''python!!''My''name''is''Anaconda']

引数なしのデフォルトでsplit()を使うと、空白や改行文字やタブ文字などを境に分割してくれます。
空白を境に分割したので出力は6つの値となって、リストと呼ばれる型のオブジェクトに格納されたデータが返ってきます。
リストの形式は以下です

variable = [値1, 値2, 値3, 値4, 値5]

リストは変数に複数の値を格納する事ができて、繰り返し処理などの処理も容易にできる便利な型です。
今回は文字列の記事なのでリストの話は別記事でしようと思います。

また、split()の第一引数(一つ目の引数)に分割するときの境目となる文字を指定する事ができます。

>>> string.split("!")
['hello python'' my name is Anaconda']

「!」を境に2つに分割されました。

そして、split()の第二引数(二つ目の引数)に分割する回数を指定することも出来ます。

>>> string.split(" "3)
['hello''python!''my''name is Anaconda']

境の文字を空白にして、分割回数を3にしました。
helloとpython!とmyまでの3回分割されて、後の文字列は空白があるのに分割されずに残っていますね。

文字列の分割回数を末尾から数えたい場合はrsplit()を使います。
第二引数に分割回数を指定すれば末尾からn回の分割を行なった結果をリスト型で返してくれます。

また、改行文字("\n"など)ごとに分割したいといった場合はsplitlines()を使えば改行文字を境に分割してくれて尚且つ末尾の改行文字("\n")を取り除いてくれるので、改行文字で分割したい場合はsplit("\n")ではなくsplitlines()を使うといいですね。

と、このようにPythonでは文字列を簡単に分割する事ができます。

文字列の結合

文字列の結合はjoin()を使います。
joinは、指定した区切り文字でリストやタプル、辞書などのの中にある各データを繋ぎ合わせて文字列を返してくれます。

>>> string_list = ["C:""Users""Junya""Desktop"]
>>"/".join(string_list)
'C:/Users/Junya/Desktop'

こんな感じでstring_listという変数に入っている各要素を、指定した区切り文字で繋げてくれます。
先程の分割のときのsplit()は「文字列.split(区切り文字)」だったのに対して結合のjoin()では「区切り文字.join(リストなどの要素)」なのでかなりややこしいですが、これも覚えるしかないですね。

文字列の結合は他にもあります。

数値の計算で使う算術演算子の「+」を使って文字列を結合する事が出来ます。

>>"hello" + " python"
'hello python'
>>> string = "Anaconda"
>>"hello python! My name is " + string
'hello python! My name is Anaconda'

とても簡単に文字列同士を結合する事ができます。

文字列の繰り返し

「*」を使えば文字列を任意の回数繰り返すことも可能です。

>>"python" * 5
'pythonpythonpythonpythonpython'

文字列の置換

特定の文字列を別の文字列に置換(入れ替え)する方法は、いくつかありますが、とりあえず始めは一般的な置換方法
を覚えていたら大丈夫なので、replace()を使ってみましょう。

replace()を使うと文字列を簡単に置換する事ができます。

>>> string = "Hello Python!"
>>> string.replace("Python""Anaconda")
'Hello Anaconda!"
>>> string.replace("!", "ista")
'Hello Pythonista'

第三引数に置換回数を指定することで任意の回数だけ置換する事ができます。

>>> string = "a a a a a a a a a a"
>>> string.replace("a""b"5)
'b b b b b a a a a a'
>>> string.replace("a""b"8)
'b b b b b b b b a a'

他にもtrancelate()や、正規表現と呼ばれる手法で置換する事ができますが今回は省略します。

文字列をフォーマットに挿入する

Pythonではテンプレートのような文字列を作成して後から特定の部分に別の文字列を挿入する事ができます。

文字列を挿入したい場所に波括弧『 { } 』を入れて、後からその場所に文字列を挿入するにはformat()を使います。
学生の頃のテストみたいに穴埋め問題に答えを入れていくというようなイメージですね。

>>> string = "Hello {}"
>>> string.format("Python")
'Hello Python'
>>> string.format("Anaconda")
'Hello Anaconda'

また、波括弧の中にインデックスを入れておけば引数の位置に対応する番号に挿入してくれます。

>>> string = "{0} is {1}. {0} is {2}"
>>> string.format("sushi""Japanese food""yummy")
'sushi is Japanese food. sushi is yummy'

formatの引数の0番目に指定したsushiが2回挿入されていますね。

他にも文字列を穴埋め方式で後から挿入する方法は色々ありますが、とりあえずこのformat()を覚えておけば大丈夫です。
他の方法を使いたくなったらその都度調べてみてください。

文字列の長さ(要素数)を数える

文字列の長さを知りたい時はPython組み込み関数のlen()を使います。
length(長さ)の略ですね。

これは文字列以外にもリスト型などの要素に対しても使えますし、よく使う関数なので知っておいた方がいいです。
返り値は要素の長さなので数値型で値が返ってきます。

>>> string = "Python"
>>> len(string)
6
>>> string2 = "Anaconda"
>>> len(string2)
8

他の型のオブジェクトを文字列型に変換する

str()を使えば数値型やリスト型などの文字列型以外の型のオブジェクトを文字列型に変換することができます。

>>> integer = 10
>>> type(integer)
<class 'int'>
>>> string = str(10)
>>>type(string)
<class 'str'>
>>> string
'10'

始めに変数integerに数値10を割り当てています。
次にtype()を使ってintegerの型を調べています。
この時点ではintegerの値は数値の10です。
続いて変数stringにstr(10)で数値型の10を文字列型に変換しています。
最後にtype()を使ってstringの型を調べると数値型の10だった値が文字列型の'10'に変わったのが分かると思います。

文字列に変換するのはプログラムでよくあるので覚えておいた方がいいと思います。

まとめ的なやつ

今回は文字列について色々と解説しました!

とりあえずこんな操作方法があるんだなーということを知っていただけたかと思います。
この記事で紹介した方法以外にも色んな方法が沢山あるのであなたが必要になった時にその都度調べて解決していくのが良いと思います。

最後まで読んでいただきありがとうございました!
では、またお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?