[初心者] [メモ] 「退屈なことはPythonにやらせよう」をやってみたメモ

## はじめに
退屈なことはPythonにやらせようをやったメモです

まだPythonを触ったことない人や同じ本をやって見たけどよくわからないから他の人のまとめを見たいみたいな需要があるかもと思って公開して見ました。

随時追加、修正していきます。
修正リクエスト大歓迎です。僕の勉強になるので！
よろしくお願いします！

## メモ
以下メモです。

### メソッド 
- データ型に紐づいた関数

### リスト
- 配列のこと
- リスト値はリストそのもの　[1, 2, 3]
- 一つ一つは要素と呼ぶ


### In と not in 演算子
ある値がリストに含まれるかどうかをinとnot in 演算子を用いて判定することができる

```python

list1 = ['tanaka', 'satou', 'suzuki', 'kimura']

print('tanaka' in list1)
// True
print('takenaka' not in list1)
// False
```


### 複数代入法

```python

cat = ['fat', 'black', 'loud']
size, color, disposition = cat
print(size) #fat
print(color) #black
print(disposition) #loud
```

長さは一致していないといけない
指定いない場合はValueErrorになる

## indexメソッド
値を渡すとリストの中を探して、**インデックス**を返す
リストに値がなければ、ValueErrorを返す
リストの中に複数値が存在する場合は最初に出現した方のインデックスを返す

```python

リスト.index(探したい要素)

list = ['tanaka', 'satou', 'kimura']

# インデックスが返ってくる
list.index('tanaka') #0
list.index('satou') #1

list.index('inoue')

#Traceback (most recent call last):
  #File "<stdin>", line 1, in <module>
#ValueError: 'inoue' is not in list
```

### append()メソッド
引数に渡された値をリストの末尾に追加する

### insert()メソッド
リストの任意の場所に値を挿入することができる

### removeメソッド
リストから値を削除する

### Delを使って値を削除
del spam[2]

### sort()メソッド
リスト中の値をソートする
文字列の配列でも数字の配列でも使えるが、型のことなる値がある場合はTypeErrorという例外を返す
逆順にするには引数にreverse=Trueを渡す

```python

spam.sort(reverse=True)
```

大文字→小文字の順にソートされる
アルファベット順にしたい場合は

```python

spam.sort(key=str.lower)
```

### 一つの命令を複数行に分けて書く場合
\ を使って改行する

```python

print('Four score and seven ' + \
'years ago...')
```

### リストはミュータブル、文字列はイミュータブル

文字列を変更するにはスライスと連結を使って元の文字列の一部から新しい文字列を作成する必要がある

```python

name = 'Zophie a cat'
new_name = name[:7] + 'the' + name[8:]
```


### タプル型
リストとほぼ同じデータ型
◯違う点
( )で囲む
イミュータブル


### 値のクラスを確認する

```python

type(  )
type((1,2,3)) # <class ‘tuple’>
```


### List関数とtuple関数を使って型を変換する

```python

tuple([‘cat’, ‘dog’, 5])
# ('cat', 'dog', 5)
list(('cat', 'dog', 5))
# [‘cat', 'dog', 5]
```

### 数値を変数に代入する場合とリストを変数に代入する場合の違い
リストを変数に代入する場合は、リストの値ではなくリストへの参照を変数に入れている

**参照を渡す**
関数が呼び出される時、引数の値はパラメーター変数にコピーされる
つまり、リストを渡すと、パラメータ変数にはそのリストの参照がコピーされる

**Copyモジュールのcopy( )関数とdeepcopy( )関数**


### 要素が一つだけのtupleを作る場合はカンマを入れる

```python

(42,)
```

## 辞書とデータ構造
リストと異なり、辞書の要素の順序は不定

#### keys()、values()、items()メソッド

- keys()

　　辞書のキーを返す

- values()

　　辞書の値を返す　

- items()

　　キーバリューペアを返す

```python

spam = {'color': 'red', 'age': 42}
for v in spam.values():
    print(v)

#red
#42

for k in spam.keys():
    print(k)

#colors
#age

for i in spam.values():
    print(i)

#('color', 'red')
#('age', 42)

```


### キーや値が辞書に存在するかどうか調べる

```python

spam = {'name':'Zophie', 'age': 7}
'name' in spam.keys()
# True

# ↑は省略してかける
'name' in spam
# True

'Zophie' in spam.values()
# True
```

### getメソッド
アクセスしたいキーと、そのキーが存在しない時に用いる値の二つの引数をとる

```python

picinic_items = {'apples': 5, 'cups': 0}

# キーが存在しないとき
'I am bringing ' + str(picinic_items.get('eggs', 0)) + ' eggs'
# 'I am bringing 0 eggs'

# キーが存在するとき
'I am bringing ' + str(picinic_items.get('apples', 0)) + ' apples'
#'I am bringing 5 apples'
```

getを使わない場合は、keyErrorが発生する


### setdefault()メソッド
辞書にキーが未登録の場合のみ値を登録する
第一引数 調べたいキー
第二引数　　そのキーが存在しない時に設定する値

```python

spam = {'name':'Pooka', 'age':5}
spam.setdefault('color', 'black')
# 'black'
 spam
# {'name': 'Pooka', 'age': 5, 'color': 'black'}
# 'color':'black'が追加されている

spam.setdefault('color', 'black')
# 'black'
#　すでに値が存在するため、'black'が返ってくる

```





## 最後に
機械学習にオススメの教材などあればコメントで教えてくださると嬉しいです。
よろしくお願いします。