pythonの基本的な「文字列操作」の文法で暗記したいこと

### (自分メモ)pythonの基本的な文法で暗記したいこと
## はじめに
自分がpthonの基本を忘れないように、自分向けに書く。
※このページを見て頂いた方すみません。完全な初心者向けではありません。
　また、よく知っている人向けに、特別なことは書いていません。

---
## コメントアウト
すべての言語で、最初に覚えなければならないのは「コメントアウト」ですね。

```rb:python0.py
#コメントアウト
```
他の記載方法もあるようですが、#だけ覚えれば十分

---
## シーケンス
次はシーケンス。これは簡単。箱のイメージです。
・右から、取得するときは、正数。
・左から、取得するときは、負数。
になる。
| num   | _0_ | _1_ | _2_ | _3_ | _4_ | _5_ |
| ----- | --- | --- | --- | --- | --- | --- |
| 左から|   0 |   1 |   2 |   3 |   4 |   5 |
| 右から|  -6 |  -5 |  -4 |  -3 |  -2 |  -1 |

※一番左が０。一番右が－１であることがポイントです。

```rb:python1.py
num="012345"

#左から「２番目」を取得 ※左から見たとき、一番左は「0番」
a1=num[1]
# '1'

#一番「右」を取得 ※右から見たとき、一番右は「-1番」
a2=num[-1]
# '5'

#「右」から「6番目」を取得
a3=num[-6]
# '0'
```

---
## スライス(基本1)[start:stop]
スライス（変数の後ろの **[]**）はpython独自(？)の使い方ができる。
しかもみんな結構使っている。（PG文書の省略に役立つ）
ただpython初心者（他PG経験者）には、配列にしか見えないので解読を難解にする。
これより先に関数を覚えても、スライスでつまずく。

次のような書き方ができる。
・変数 **[start:stop]**

```rb:python2.py
num="012345"

#「3番目～」を取得　＜「:」と「～」の関係に注目
a1=num[3:]
# '345'

#「～3番目」を取得
a2=num[:3]
# '012'

#「3番目～5番目」を取得
a3=num[3:5]
# '34'
```

・・・って、ちょっと待って！。なんで'345'じゃないの？
それは、順番の数え方が次の通りだから。。。
| num   |     | _0_ |     | _1_ |     | _2_ |     | _3_ |     | _4_ |     | _5_ |     |
| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| start | 0   |     | 1   |     | 2   |     |**3**|     |     |     |     |     |     |
| stop  | 0   |     | 1   |     | 2   |     | 3   |     | 4   |     |**5**|     | 6   |

なので、次の通りになる
```rb:python2-1.py
num="012345"

a3_1=num[3:4]
# '3'

a3_2=num[3:3]
# ''
```

---
## スライス(基本1.5)[start:stop]逆数

マイナスを使うと、左からカウントしてくれる。
ExcelのRight関数のような感じですね。
そして、±を組み合わせると、文字列の中間地点などを取得することもできる。
＋とマイナスの判断位置は表にすると次の通りである。

<!-- コメントアウト

左右にカウントするときには次の通り。
| num   |     | _0_ |     | _1_ |     | _2_ |     | _3_ |     | _4_ |     | _5_ |
| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| start | 0   |     | 1   |     | 2   |     | 3   |     | 4   |     | 5   |     |
| start | -6  |     | -5  |     | -4  |     | -3  |     | -2  |     | -1  |     |
| stop  | 0   |     | 1   |     | 2   |     | 3   |     | 4   |     | 5   |     |
| stop  | -6  |     | -5  |     | -4  |     | -3  |     | -2  |     | -1  |     |

-->

| num   |     | _0_ |     | _1_ |     | _2_ |     | _3_ |     | _4_ |     | _5_ |     |
| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|右から | 0   |     | 1   |     | 2   |     | 3   |     | 4   |     | 5   |     | 6   |
|左から | -6  |     | -5  |     | -4  |     | -3  |     | -2  |     | -1  |     |     |


```rb:python2-2.py
num="012345"

# 後ろの２つ[だけ]欲しい
a1=num[-2:]
# '45'

# 後ろの３つ[だけ]欲しいが、最後の１つは不要
a2=num[-3:-1]
# '34'

# 前１つ不要。後ろ１つ不要
a3=num[2:-2]
# '234'

# 後ろから５つ、前から５つの交差する範囲が欲しい　＜需要ある？
a3=num[-5:5]
# '1234'
```

---
## スライス(基本2)[start:stop:step]
stopの後ろに、 **step** という項目を追加することで、面白いことができます。


・変数 **[start:stop:step]**
```rb:python2-3.py
#「２個飛ばし」で取得　※０から始まるので、たまたま偶数になった

num="0123456789"

a1=num[::2]
# '024'

#「逆順(後ろから順番)」に表示
a2=num[::-1]
# '543210'
```

---
## スライス(応用)


```rb:python3.py
#あえてスライスを記入して、元と同じように表示するに次の通り（デフォルト値？）
num="0123456789"

a1=num[0::1] #a
# '0123456789'

#組み合わせても使える
#「逆順」にして「２個飛ばし」で取得。「逆順」にする。
a2=num[::-1][::2][::-1]
# '13579'
##987654321　→　97531　→　13579　と変化している

#リスト型でも使える。「２個飛ばし」で取得
numl=[0,1,2,3,4,5,6,7,8,9]
n1=numl[::2]
# [0, 2, 4, 6, 8]
```

>**参考**
>スライスについて、細かく知りたい方はこちらが良いかと思います。
>https://qiita.com/tanuk1647/items/276d2be36f5abb8ea52e

---

## 文字列検索・置換・比較
よくある感じ。簡単です。

```rb:python4.py
num="0123456789"

#表示位置を取得する
foo=num.find("1")
# 1

#検索して指定した文字へ変換する
foo=num.replace("1","a")
# '0a23456789'

abc1="abc"
abc2="abc"

#単純比較は演算子で簡単
abc1==abc2
# True

#部分比較
"bc" in abc1
# True
```
---

## 「文字列⇒リスト」・「リスト⇒文字列変換」
区切り文字が「空白」というのがポイント

```rb:python5.py
abc='a b c d e f'
#文字列⇒リストへ変換する。 ※空白区切り
abcl = abc.split()
# ['a','b','c','d','e','f']

#リスト(文字)⇒文字列に変換する ※空白区切り
a1=" ".join(abcl)
# 'a,b,c,d,e,f'

numl=[0,1,2,3,4,5,6,7,8,9]
#リスト(数字)⇒文字列に変換する ※空白区切り　＜mapで事前にstr型にするのがポイント
n1=" ".join(map(str,numl))
# '0 1 2 3 4 5 6 7 8 9'
```

>join splitについて詳しくはこちら
>https://techacademy.jp/magazine/28688
>https://note.nkmk.me/python-split-rsplit-splitlines-re/
>https://hydrocul.github.io/wiki/programming_languages_diff/string/join.html
>

---
## 文字を結合・余分な空白を消す
これも覚えれば簡単

```rb:python6.py
st="hello"
ed=" world"

#２つの文字を結合
l1=st+ed
# 'hello world'

#余分な空白を消す
ed.strip()
# 'world'
```