[Python] リスト、タプル、辞書の違いまとめ

# はじめに

こんにちは！
Pythonでデータを扱う際、よく忘れるので、自分用にまとめです。
今回は、リスト、タプル、辞書の違いについてまとめます。

# リスト、タプル、辞書の違い
ざっくりと書くと、以下の通り。

| 特徴     | リスト                               | タプル                               | 辞書                                                     |
|----------|---------------------------------------|---------------------------------------|----------------------------------------------------------|
| データ構造 | 順序付けられたデータの集まり           | 順序付けられたデータの集まり           | キーと値のペア                                             |
| 順序の保持 | ○                                   | ○                                   | ○ (Python3.7以降)<BR>× (Python3.6以前)                              |
| 変更 | 可                             | 不可                             | 可                                                 |
| メモリ効率 | タプルと比較してわずかに不利         | リストと比較してわずかに有利         | キーの重複がないため、リストやタプルと比較して効率が良い場合がある |
| 主な用途   | データの順番が重要な場合<br>動的なデータ操作が必要な場合 | 変更不可であることを保証したいデータ<br>辞書のキー | データに名前を付けて管理したい場合<br>キーによる高速な検索が必要な場合 |

以下では、これらのデータ構造について、より詳細に解説していきます。

### 1. リスト：柔軟なデータ操作を実現

リストは、要素と呼ばれるデータの列を保持するために使用されます。
リストの特徴は、要素の追加、削除、変更といった操作を自由に行える点。
特に、プログラムの実行中にデータの内容が変化する場合に便利。

```python
# リストの作成
shopping_list = ["apple", "banana", "milk"]

# 要素へのアクセス
print(shopping_list[0])# 出力: apple

# 要素の追加
shopping_list.append("eggs")
print(shopping_list)  # 出力: ['apple', 'banana', 'milk', 'eggs']

# 要素の変更
shopping_list[1] = "orange"
print(shopping_list)  # 出力: ['apple', 'orange', 'milk', 'eggs']

# 要素の削除
del shopping_list[2]
print(shopping_list)  # 出力: ['apple', 'orange', 'eggs']

# 一部分だけを取り出す
print(shopping_list[1:3])  # 出力: ['orange', 'eggs']
```



**メリット:**

* データ操作の柔軟性が高い
* 部分的なデータへのアクセスが容易

**注意点:**

* データの変更が可能であるということは、意図しない変更が発生するリスクもある
* タプルと比較すると、メモリ使用量や処理速度の面でわずかに不利になる場合がある（らしい）

### 2. タプル：一度決めたら変更不要なデータに最適

タプルもリストと同様に、順序付けられたデータの集まりを扱います。
リストとの大きな違いは、一度作成したデータの内容を変更できない点。
これは、プログラムの実行中にデータの内容が変わらないことが保証したい場合に便利。

```python
# タプルの作成
coordinate = (10, 20)

# 要素へのアクセス
print(coordinate[0])  # 出力: 10

# 要素の変更はできません (エラー発生)
# coordinate[1] = 30 

# データを個別に受け取る
x, y = coordinate
print(x, y)  # 出力: 10 20
```

**メリット:**

* データの変更を防ぎ、安全性を高める
* 辞書のキーとして使用可能
* リストと比較して、メモリ使用量や処理速度の面でわずかに有利になる場合がある（らしい）

**注意点:**

* データの内容を変更できないため、柔軟性に欠けるという側面あり


### 3. 辞書：名前でアクセスするデータ管理を実現

辞書は、キーと値の組み合わせでデータを管理します。
キーを用いることで、目的のデータにすばやくアクセスできます。
これは、大量のデータの中から特定のデータを探し出す必要がある場合に非常に便利。

```python
# 辞書の作成
user = {"name": "Alice", "age": 30, "city": "New York"}

# キーによる値へのアクセス
print(user["name"])  # 出力: Alice

# 要素の追加
user["occupation"] = "engineer"
print(user)  # 出力: {'name': 'Alice', 'age': 30, 'city': 'New York', 'occupation': 'engineer'}

# 要素の変更
user["city"] = "London"
print(user)  # 出力: {'name': 'Alice', 'age': 30, 'city': 'London', 'occupation': 'engineer'}

# 要素の削除
del user["age"]
print(user)  # 出力: {'name': 'Alice', 'city': 'London', 'occupation': 'engineer'}
```

**メリット:**

* キーによる高速なデータアクセス
* データの追加、削除、変更が可能

**注意点:**

* Python3.6以前は、データの順番は保持されないため、順番が重要な場合はリストやタプルを使う必要がある
* Python3.7以降は、データの順序は保持される。

### まとめ

どのデータ構造を選ぶかは、目的や状況によって異なります。

* 柔軟なデータ操作が必要な場合は **リスト**
* データの安全性を重視する場合は **タプル**
* キーによる高速なデータアクセスが必要な場合は **辞書**

それぞれの特性を理解した上で使い分けることで、より効率的で安全なPythonプログラムを作成しましょう！