Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Python辞典

  1. トップページ
  2. Python辞典
  3. list() / tuple() / set()

list() / tuple() / set()

リスト・タプル・セットを相互に変換する組み込み関数です。それぞれのデータ型の特性を活かして使い分けます。

構文
# イテラブルをリストに変換します。
list(イテラブル)

# イテラブルをタプル(変更不可のリスト)に変換します。
tuple(イテラブル)

# イテラブルをセット(重複なし・順序なし)に変換します。
set(イテラブル)

# イテラブルを変更不可のセットに変換します。
frozenset(イテラブル)
関数一覧
関数概要
list(iterable)イテラブルをリストに変換します。引数なしで空リストを作成します。
tuple(iterable)イテラブルをタプルに変換します。タプルは変更不可(イミュータブル)です。
set(iterable)イテラブルをセットに変換します。重複は自動で除去され、順序は保証されません。
frozenset(iterable)変更不可のセットを作成します。辞書のキーやセットの要素として使えます。
サンプルコード
# list() で様々なオブジェクトをリストに変換します。
print(list(range(5)))      # [0, 1, 2, 3, 4]
print(list("python"))      # ['p', 'y', 't', 'h', 'o', 'n']
print(list((1, 2, 3)))     # [1, 2, 3](タプル→リスト)
print(list({1, 2, 3}))     # [1, 2, 3](セット→リスト)

# tuple() でリストをタプルに変換します。
nums = [1, 2, 3, 4, 5]
t = tuple(nums)
print(t)          # (1, 2, 3, 4, 5)
print(type(t))    # <class 'tuple'>

# タプルは変更不可です。
# t[0] = 99  # TypeError が発生します。

# タプルは辞書のキーとして使えます(リストは使えません)。
coordinates = {(35.68, 139.76): "東京", (34.69, 135.50): "大阪"}
print(coordinates[(35.68, 139.76)])  # 東京

# set() で重複を取り除きます。
nums_with_dup = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = set(nums_with_dup)
print(unique)  # {1, 2, 3, 4}(順序は不定)

# セットを使った重複除去からリストに戻します。
deduped = list(set(nums_with_dup))
print(sorted(deduped))  # [1, 2, 3, 4]

# セット演算を使った集合演算です。
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
print(a & b)    # {3, 4, 5}(積集合・両方に含まれる要素)
print(a | b)    # {1, 2, 3, 4, 5, 6, 7}(和集合)
print(a - b)    # {1, 2}(差集合・a にあって b にない要素)
print(a ^ b)    # {1, 2, 6, 7}(対称差・どちらかにしかない要素)

# frozenset() で変更不可のセットを作ります。
fs = frozenset([1, 2, 3])
print(fs)         # frozenset({1, 2, 3})
# fs.add(4)       # AttributeError(変更できません)

# frozenset は辞書のキーやセットの要素として使えます。
permissions = frozenset(["read", "write"])
access_table = {permissions: "通常ユーザー"}

# 各型の特性まとめです。
# リスト   → 順序あり、重複あり、変更可
# タプル   → 順序あり、重複あり、変更不可
# セット   → 順序なし、重複なし、変更可
# frozenset → 順序なし、重複なし、変更不可
概要

リスト・タプル・セットはそれぞれ用途が異なります。変更する必要がないデータ(座標・RGB値・曜日など)はタプルで持つと安全です。また、タプルはリストより若干メモリ効率が良く、ハッシュ可能なのでデータのキーとして使えます。

セットの最大の用途は重複除去と高速な存在確認です。セットの『in』演算子はリストのO(n)に対してO(1)(平均)で動作します。大量のデータから特定の値を頻繁に検索する場合はリストをセットに変換してから検索してください。

『set()』に変換すると要素の順序は保持されません。順序を保ちながら重複を除去したい場合は、Python 3.7以降では辞書のキーが挿入順を保持することを利用して『list(dict.fromkeys(iterable))』という手法が使えます。セットを使った辞書の操作については『辞書.keys() / values() / items()』も参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。