復習　Python tutorial #3 データ構造２

##タプル
タプルは#2で説明した通りイミュータブル(変更不可)なものである。作り方はごく簡単で、()を使って作成すれば良い。また変更したいと思った時はリストに変更すれば良い話である。そのことについてもこの後説明していく。

###タプルの作り方


```py
your_characteristics = ('name', 'born', 'living', 'state')
#もしくは
your_characteristics = 'name', 'born', 'living', 'state'
```
このどちらかでタプルの作成はできる。

###他の機能
タプルの良いところの一つに一度に複数の変数を代入できるということもある。

```python
name, born, living, state = your_characteristics
print(name)
```

##辞書
辞書はリストと似ている部分があるが、要素を取り出すときに異なる点がある。まず個々の値に一意のキーを与える。キーは文字列の場合が多い。また辞書はイミュータブルなのでキー/値の変更や追加編集などが主に可能になる。

###作成
{}を用いて作成していく。そのときにkey:valueのペアをカンマで区切って並べ{}で囲んで作る。

```python
my_characteristics = {'name': 'Kouta','FROM':'TOKYO', "LIVING":'NEW YORK', "FAVORITE FOOD": "SUSHI"}
print("I'm from", my_characteristics["FROM"])
#実行結果
I'm from TOKYO
```

このように簡易的な個人情報とかには最適のように感じる。また要素の取り出しも簡易的で定義も見やすいのでよく使われるものである。

###dict()を用いて変換
dict()を用いることによってリストから変換することができる。例えば

```python
food_translating = [['PIZZA', 'ピザ'], ['PASTA', 'パスタ'], ['Soup', 'スープ']]
dict_food_translating = dict(food_translating)
print(dict_food_translating)
```
###update()による結合
updateを使うと辞書同士を結合できる。

```python
other_my_characteristics = {'GENDER': "MAN"}
my_characteristics.update(other_my_characteristics)
print(my_characteristics)
#実行結果
{'name': 'Kouta', 'FROM': 'TOKYO', 'LIVING': 'NEW YORK', 'FAVORITE FOOD': 'SUSHI', 'GENDER': 'MAN'}
```
###del()によるしていしたキーを持つ要素の削除

```python
del my_characteristics['GENDER']
print(my_characteristics)
#実行結果
{'name': 'Kouta', 'FROM': 'TOKYO', 'LIVING': 'NEW YORK', 'FAVORITE FOOD': 'SUSHI'}
```
###inを使ったキーの有無のテスト

```python
print('name' in my_characteristics)
#実行結果
True
```

###keys()による全てのキーの要素の取得

```python
print(my_characteristics.keys())
#実行結果
dict_keys(['name', 'FROM', 'LIVING', 'FAVORITE FOOD'])
```

###value()による全ての値の取得

```python
list_my_characteristics = list(my_characteristics.values())
print(list_my_characteristics)
#実行結果
['Kouta', 'TOKYO', 'NEW YORK', 'SUSHI']
```

###clear()による全ての要素の削除

```python
my_characteristics.clear()
```
##集合
集合は値を放り出してキーだけを残した辞書みたいなものである。辞書と同様に個々のキーは一位でなければならない。集合は何かがあるかどうかの確認の時に使われる。だから、辞書のように何か値があり、その情報などを打ち込む必要はない。だから集合の表し方は値のない辞書のようなものであり、{}で表せる。

```python
even_numbers = {2, 4, 6, 8}
odd_numbers = {1,3,5,7}
# set()による作成
My_name = set('Kouta')
#実行結果
{'o', 'a', 'u', 't', 'K'}
```
このようにランダムな値が返される。また同じ文字が入っていても、そのうちの一つしか値が取り出せないことにも注意が必要である。

###inを用いた値の有無のテスト

```python
print('K' in My_name)
# 実行結果
True
```

#### その応用
これからやっていくifやforを用いて行うもので要素があるかどうかチェックするものである。辞書を使う時、key: valueであるがこの時両方の要素を取り出す時にはitemsを用いることによってkey: valueの両方に関して代入ができる。またif文に関しては追って説明していくが、このようにして、今日はパスタが食べたいとかになったら行きたい店を検索できるようになる。

```python
food_shop = {'A MART': {'Curry', 'Pasta', '親子丼', 'Ramen', 'Sushi'},
'B MART': {'Pizza', 'Pasta', 'Ramen'},
'C MART': {'Potato', 'Ice', 'Curry', 'Sushi'}}
for name, menu in food_shop.items():
    if 'Pasta' in menu:
        print(name)
#実行結果
A MART
B MART
    if menu & {'Pasta', 'Pizza'}:
        print(name)
#実行結果
A MART
B MART
```
&は{}中にあるどちらかが入っていたら値を返す積集合演算子である。

##データ構造
もっと大きいデータ構造を考えるとなると、制限がつく。その制限はデータ自体にあり、例えば、辞書のキーに関してはイミュータブルである。よってリスト、辞書、集合は他の辞書のキーにはならない。しかしタプルはキーになる。（タプルはイミュータブルだから）このようなものとして実用的な物の一つにGPS座標がある。要は座標という物はイミュータブルでないといけないが辞書と一緒に用いる時に値の部分に置いてしまうと簡単に変更できてしまう。これを防ぐために辞書のキーに指定することによってイミュータブル化する。