はじめに
本記事では、Pythonの基本的なデータ構造について、実際のコードや使い分けの観点を交えてまとめています。
「なぜ list
は append()
なのに set
は add()
なのか?」といった素朴な疑問にも答えます。
📦 Pythonの基本データ構造一覧
データ構造 | 説明 | 特徴 | 例 | 主な用途 |
---|---|---|---|---|
list (リスト) |
順序ありの配列 | 重複OK、変更可 | [1, 2, 3] |
順番通りのデータ保持 |
tuple (タプル) |
順序ありの配列(変更不可) | 重複OK、変更不可 | (1, 2, 3) |
定数の集まり、辞書のキーなど |
set (集合) |
順序なし、重複なし | 重複NG、変更可 | {1, 2, 3} |
重複排除、集合演算 |
dict (辞書) |
キーと値のペア | 順序あり(Python 3.7以降) | {"a": 1, "b": 2} |
データのマッピング |
deque (双方向キュー) |
両端から操作可能なリスト | 高速なpop/append操作 | deque([1, 2, 3]) |
スタック・キュー実装 |
🧠 メソッドの違い:append()
と add()
# listの場合
l = []
l.append(1) # OK
# setの場合
s = set()
s.add(1) # OK
# s.append(2) # エラー: 'set' object has no attribute 'append'
-
list.append()
:順序を持った末尾に追加(重複OK)- append は「後ろにくっつける」という英語の意味
-
set.add()
:集合に追加(重複NG)- setは順序なし・重複なし
- 要素を「どこに」追加するかは意味を持たず、集合に「含まれるか否か」が重要
- add は 「集合に要素を加える」 という英語の一般的な意味
🧰 スタックとキューの実装
スタック(後入れ先出し)
stack = []
stack.append(10)
stack.append(20)
print(stack.pop()) # 20
キュー(先入れ先出し)
from collections import deque
queue = deque()
queue.append(10)
queue.append(20)
print(queue.popleft()) # 10
🎯 演習問題と解法
問題:リストから重複を除き、元の順序を保ったまま出力せよ
入力例
words = ["apple", "banana", "apple", "orange", "banana"]
出力例
["apple", "banana", "orange"]
解法1:set + listで順序保持
def filter_unique(seq):
seen = set()
result = []
for item in seq:
if item not in seen:
result.append(item)
seen.add(item)
return result
words = ["apple", "banana", "apple", "orange", "banana"]
print(filter_unique(words))
🧵 まとめ:どれを使うべきか?
目的 | 選ぶ構造 |
---|---|
順序付き+重複あり | list |
順序付き+変更不可 | tuple |
重複なし | set |
キーと値の組み合わせ | dict |
高速なpop/append | deque |
🔚 おわりに
本記事ではPythonのデータ構造の基本と使い分けについて解説しました。