← Back to library
データ構造 AIに質問関連 0 問題

Python Collections (list / set / dict)

Pythonのデータ構造(list・set・dict)

概要

Python で複数のデータをまとめて管理する代表的な構造は list / set / dict の 3 つ。

項目listsetdict
保持するデータ値の並び値のみキーと値
書き方[1, 2, 3]{1, 2, 3}{"a": 1, "b": 2}
重複可能不可キーの重複は不可
順序保持される順序を前提にしない挿入順を保持する
インデックス指定可能不可不可
主な用途順序ありデータ管理存在確認・重複除去・集合演算キーと値の対応関係の管理
検索対象キー
平均検索時間O(n)O(1)O(1)
要素の追加append()add()dict[key] = value
要素の取得list[index]直接取得は不可dict[key]

list

list は、複数の値を順番に管理するデータ構造。順序やインデックスが必要な場合に利用するが、値の存在確認は平均 O(n)

nums_list = list(nums)

print(nums_list[0])       # 100
print(200 in nums_list)   # True

set

set は、重複しない値を管理するデータ構造。値の存在確認・重複除去が目的の場合に利用し、検索は平均 O(1)。インデックスは利用できない。

nums_set = set(nums)

print(200 in nums_set)  # True

dict

dict は、キーと値のセットで管理するデータ構造。数値にインデックスなどの追加情報が対応する場合に利用する。

nums_dict = {
    num: index
    for index, num in enumerate(nums)
}

print(nums_dict[200])  # 2

使い分け

list = 順序やインデックスが必要
set  = 値が存在するかだけ確認したい
dict = キーから対応する値を取得したい
操作listsetdict
存在確認O(n)平均 O(1)平均 O(1)
末尾への追加平均 O(1)平均 O(1)平均 O(1)
インデックス取得O(1)不可不可
キーから値を取得不可不可平均 O(1)

計算量

操作平均最悪
存在確認
末尾への追加
インデックス取得
キーから値を取得

学習メモ

「存在だけ確認したいなら set、キーと値を対応させたいなら dict、順序とインデックスが必要なら list」を判断基準にする。set/dict の O(1) はハッシュ表由来で、最悪ケースは衝突時の O(n)。