複数の値をまとめて扱うとき、Python には用途の異なる 4 つの代表的な型があります。本記事では list / tuple / set / dict の違いを、株価データを扱う場面に寄せて整理します。
目次
- 4 つのコレクション型の比較
- list — 順序のある値の並び
- tuple — 変えてはいけない組
- set — 一意な値の集まり
- dict — キーで引く対応付け
- 使い分けの目安
4 つのコレクション型の比較
それぞれの型は「順序」「重複」「変更可否」「要素アクセスの方法」が異なります。
| 型 | 順序 | 重複 | 変更 | 主な用途 |
|---|---|---|---|---|
list | あり | 可 | 可 | 株価系列など順序のあるデータ |
tuple | あり | 可 | 不可 | 変えてはいけない組(座標・日付の範囲など) |
set | なし | 不可 | 可 | 一意な値の集まり(重複排除・集合演算) |
dict | あり(挿入順) | キーは不可 | 可 | キーで引く対応付け(銘柄コード→社名など) |
「順序が必要か」「重複を許すか」「キーで引きたいか」の 3 点で選ぶと迷いにくくなります。
list — 順序のある値の並び
リストは最も使用頻度が高いコレクション型です。[ ] で囲んで作ります。
prices = [2900, 2925, 2880, 2910, 2945]print(prices[0]) # 2900 (先頭)print(prices[-1]) # 2945 (末尾)print(prices[1:3]) # [2925, 2880] (スライス)print(len(prices)) # 5要素の追加・削除も柔軟に行えます。
prices.append(2960) # 末尾に追加prices.insert(0, 2880) # 先頭に挿入prices.pop() # 末尾を取り出して削除prices.remove(2880) # 値を指定して最初の一致を削除時系列の終値や日付列など、順序が意味を持つデータに向いています。
tuple — 変えてはいけない組
タプルはリストに似ていますが、作成後は変更できません。( ) で囲みます。
date_range = ("2026-04-01", "2026-04-30")ohlc = (2900, 2950, 2880, 2925) # 始値・高値・安値・終値
# date_range[0] = "2026-05-01" # ❌ TypeError「2 つの値をペアで返したい」「定数として扱いたい」場面で使います。関数が複数の値を返すときも、内部的にはタプルが返ります。
def min_max(values: list[int]) -> tuple[int, int]: return min(values), max(values)
low, high = min_max([2900, 2925, 2880])print(low, high) # 2880 2925set — 一意な値の集まり
集合は重複を許さない型です。{ } で囲んで作ります(空集合は set())。
watchlist_a = {"7203", "9984", "6758"}watchlist_b = {"9984", "6758", "8035"}
print(watchlist_a | watchlist_b) # 和集合: {'7203', '9984', '6758', '8035'}print(watchlist_a & watchlist_b) # 積集合: {'9984', '6758'}print(watchlist_a - watchlist_b) # 差集合: {'7203'}「重複を取り除きたい」「2 つのリストの共通銘柄を抽出したい」場面で威力を発揮します。
tickers = ["7203", "9984", "7203", "6758"]unique_tickers = set(tickers)print(unique_tickers) # {'7203', '9984', '6758'}dict — キーで引く対応付け
辞書は「キー」と「値」を対応させて持つ型です。{ key: value } の形で作ります。
companies = { "7203": "トヨタ自動車", "9984": "ソフトバンクグループ", "6758": "ソニーグループ",}
print(companies["7203"]) # トヨタ自動車print(companies.get("0000", "—")) # — (存在しないキーの安全な取り出し)print("9984" in companies) # Trueループでは .items() でキーと値を同時に取り出せます。
for code, name in companies.items(): print(f"{code}: {name}")銘柄コードから社名を引くときや、API レスポンスの JSON を扱うときの中心になる型です。
使い分けの目安
実際の分析コードで迷ったら、次の質問を順に当てるとほぼ決まります。
- キーで値を引きたいか →
dict - 重複を排除したいか / 集合演算を使いたいか →
set - 作ったあと変えたくないか →
tuple - それ以外 →
list
生成AI へのプロンプト例
「どの型を使うべきか」を生成AI に相談する例です。
次の処理を書きたいです。Python のどのコレクション型を使うのが適切か、理由とサンプルコードを教えてください。
- 100 銘柄ぶんの銘柄コードと社名を保持しておき、銘柄コードから 社名を高速に取り出したい- 銘柄コードは重複しない- 後から銘柄を追加・削除する可能性がある選択の根拠とサンプルコードがセットで返ると、判断のクセが身に付きやすくなります(#7-2「データ分析のためのプロンプト設計」)。
まとめ
listは順序のある値の並びで、変更可能tupleはリストに似ているが変更不可。固定の組に使うsetは重複なし。集合演算と高速な所属判定が得意dictはキーで値を引く対応付け。API レスポンスの中心になる型