[光-Hikari-のPython]02章-05 Pythonプログラムの基礎（文字列の操作・メソッド）

#[Python]02章-05 文字列の操作
[「02章-02」](https://qiita.com/ko0821/items/ce9dab207a0b06a8bee4)で文字列について基本的な部分を扱いました。

今回はそれら文字列から一部を取り出したり、メソッドと呼ばれる命令を用いて操作をしてみたいと思います。

##文字列の取り出し（単一文字の取り出し）
文字列に対して、一部を取り出して表示することができます。
今回は**Pythonコンソール**からプログラムを動かしていきたいと思います。

まずは、以下のコードを入力してください。

```.py
>>> str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> print(str)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
```
内容はstrという変数に「ABCDEFGHIJKLMNOPQRSTUVWXYZ」という文字列を代入しています。それをprint関数で画面表示しています。

なお、アルファベットは知っての通り、26種類あります。本当に26種類あるかを確認するには、**len関数**を用いて、文字列の長さ（length）を知ることもできます。

```.py
>>> len(str)
26
```

str変数に格納されている文字列を以下の表にまとめてみました。また**番号は0から始めて**います。

|番号|0| 1 | 2 | 3 | 4 | 5 | … | 22 | 23 | 24 | 25 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|文字列|A|B |C  |D  |E  |F  |…  | W  |X   |Y   |Z   |

上記の表を把握した状態で、文字を取り出してみたいと思います。
文字を取り出すには、[]内に**取り出す位置の番号を記載**します。
**Pythonコンソール**に以下のコードを入力してください。

```.py
>>> str[0]
'A'
>>> str[1]
'B'
>>> str[9]
'J'
```

なんとなく気づいた方も多いと思いますが、**Pythonの場合、先頭は0**になります。
なお、先頭はプログラミング言語によっては1から開始するものもありますのでご注意ください。

上記の表を見るとわかる通り、番号は25までしかありません。そのため、文字列の長さを超える数を指定するとエラーとなります。

```.py
>>> str[26]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: string index out of range
```

また、[]内には負の数も指定できます。負の数を指定すると、文字列の末尾からの取り出しとなります。
**Pythonコンソール**に以下のコードを入力してください。

```.py
>>> str[-1]
'Z'
>>> str[-2]
'Y'
>>> str[-9]
'R'
```

##文字列の取り出し（複数の文字列取り出し）、スライス
文字列は、範囲を指定して取り出すこともできます。これを**スライス**と言ったりします。
範囲を指定するには「:」（コロン）を指定します。

実際に**Pythonコンソール**で確認してみましょう。以下のコードを入力してください。使用する文字列は先ほどと同じ以下の通りです。
str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

```.py
>>> str[5:]
'FGHIJKLMNOPQRSTUVWXYZ'
>>> str[:24]
'ABCDEFGHIJKLMNOPQRSTUVWX'
>>> str[5:24]
'FGHIJKLMNOPQRSTUVWX'
```

まず、str[5:]についてですが、先ほども提示した以下の表、

|番号|0| 1 | 2 | 3 | 4 | 5 | … | 22 | 23 | 24 | 25 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|文字列|A|B |C  |D  |E  |F  |…  | W  |X   |Y   |Z   |

にもある通り、5番目以降の文字列（'F'以降）の範囲が取り出されています。
少しこれを数学的に表現してみます。（xは番号と考えてください）

```math
5≦x
```

となり、5番目も含んだ範囲が取り出されています。

次に、str[:24]についてです。表と照らし合わせてみると、24番目の'Y'が含まれていません。これは24番目の**手前まで取り出される**ことに注意してください。
数学的に表現すると、

```math
x＜24
```

となり、24番目は含まないことに注意して下さい。

最後に、str[5:24]ですが、これは上記2つを組み合わせたものでとなります。先頭と末尾を指定した範囲を取り出しています。
ただし、前述した通り、末尾の手前まで取り出されることに注意してください。
数学的に表現すると、

```math
5≦x＜24
```
となります。

範囲を指定しての取り出しについて補足ですが、何文字間隔で文字を取り出すこともできます。以下の例では2文字間隔で取り出しています。

```.py
>>> str[::2]
'ACEGIKMOQSUWY'
```

##文字列に関するメソッド
**メソッド（method）**とは何かに対する処理命令を行うという認識で構いません。
今回は文字列を扱ってますので、文字列に対して、「アルファベット文字列をすべて小文字にする」「最後に文字を追加する」といった処理命令です。

メソッドに関する詳細な内容は、後述します。

メソッドの利用方法は、

```
対象.メソッド()
```
というように、「.」（ドット）で区切ります。
メソッドにも多種あります。基本的なものをいくつか紹介していきたいと思います。

####文字列を小文字または先頭のみ大文字にする。
<font color=#00cc00>lower()</font>：文字列を小文字にできます。

```.py
>>> str.lower()
'abcdefghijklmnopqrstuvwxyz'
```

<font color=#00cc00>capitalize()</font>：先頭のみ大文字にできます。

```.py
>>> str.capitalize()
'Abcdefghijklmnopqrstuvwxyz'
```
ちなみに、str変数を使用しないでも、以下のように直接メソッドを適用できます。

```.py
>>> 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.capitalize()
'Abcdefghijklmnopqrstuvwxyz'
```


###文字列のカウントに関するメソッド
今回は異なる文字列を指定します。以下のように入力してください。

```.py
>>> str1 = 'tomorrow'
```
<font color=#00cc00>count(検索したい文字)</font>：検索したい文字をカウントします。

```.py
>>> str1.count('o')
3
```

上記例では、'o'という文字がstr1内に何文字入っているかをカウントしています。

countメソッドはもっと細かく指定することもでき、以下のように範囲指定もできます。
以下の例では、3番目以上、5番目より手前までに限定した範囲で'o'という文字をカウントしています。（もちろん、0からのカウントです。）

```.py
str1.count('o',3,5)
1
```

###分割や挿入
今回も異なる文字列を指定します。以下のように入力してください。

```.py
>>> str2 = 'Takumi,Nami,Zhong,Ichiko'
```

<font color=#00cc00>split(分割文字)</font>：文字列を指定した文字列で分割したリストを作成する。

**リスト**についての詳細は4章以降で取り上げますが、上記例では4つの要素に分けることができるという認識で構いません。

以下のように使用します。

```.py
>>> str2.split(',')
['Takumi', 'Nami', 'Zhong', 'Ichiko']
```

str2変数内に格納されている1つの文字列について、「,」（カンマ）の部分で分割しています。
出力結果が、[]で囲まれており、これがリストと言われる構造です。4つの文字列に分けることができました。リストの詳細は後述します。

なお、後ほど、このリストを使用するため、いったん**ls**（エル・エス）という変数に代入します。

```.py
ls=str2.split(',')
print(ls)
['Takumi', 'Nami', 'Zhong', 'Ichiko']
```

<font color=#00cc00>join(結合対象)</font>：リストでバラバラになったものを1つの文字列にする。

先ほどのsplitメソッドと逆のことを行います。つまり4つに分けた文字列を1つにするというものです。

以下のように入力して、動作を確認してみてください。

```.py
>>> '%'.join(L)
'Takumi%Nami%Zhong%Ichiko'
```

このように、4つに分かれたリストを'%'を用いて、1つの文字列にできました。

##様々なメソッド
上記で紹介した例はほんの一例です。
メソッドは限りない数が存在し、実際にはメソッドをWeb上で調べてそれを適用するという形が多くなると思います。

以下に今回の範囲である、文字列に関するメソッドのリンクを張っておきます。

[文字列に関するメソッド](https://docs.python.org/ja/3/library/stdtypes.html#string-methods)

それ以外にも、数値の取り扱いに関するメソッドなど、様々なメソッドが存在しますので、確認してみてください。

[様々なメソッド](https://docs.python.org/ja/3/library/stdtypes.html)

リンク先に書いてある、これらの用語は最初は読みづらいかもしれないですが、少しずつ進めていくうえで、慣れていくかと思われます。

##最後に
今回は文字列の処理やメソッドについて触れました。
メソッドは多種あるため、メソッドを暗記するというよりかは、必要に応じて上記のリンク先から調べて適用していくという形になっていくと思われます。
実際に実務上でもそうなります。

ぜひいろいろなメソッドを試してください。

###[【目次リンク】へ戻る](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)