コース一覧
    Pythonコレクション
    setで重複除去

    Pythonコレクション

    リスト、辞書、集合、タプルなどのコレクションを学び、複数のデータを適切に扱えるようにします。

    1
    リストと辞書
    01. リストの追加と削除15分
    02. スライス15分
    03. 辞書の基本15分
    04. 辞書を走査15分
    05. keyでソート15分
    06. setで重複除去15分
    07. リスト内包表記15分
    08. タプルアンパック15分
    09. つくる:カテゴリ別集計15分
    10. 第7章クイズ10分

    setで重複除去

    set は重複を持てない

    not in で毎回、全部を調べ直している

    支出が 30 件あっても、使ったカテゴリは数種類です。「今月はどれを使ったか」を出したいとき、素直に書くとこうなります。

    Python

    seen = []
    for name in names:
        if name not in seen:
            seen.append(name)

    動きはします。ただし 1 件ごとに、それまでに入れた全部と照らし合わせています。件数が増えるほど遅くなります。

    「同じものを 2 つ持たない」という性質を最初から備えた入れ物が set です。日本語では集合と呼びます。リストを渡すだけで重複が消えます。

    Python

    names = ["パン", "牛乳", "パン", "パン"]
    print(set(names))

    {'パン', '牛乳'} のような形で出ます。パン が 3 つあっても 1 つにまとまります。波かっこで囲まれますが辞書とは別もので、集合が持つのは値だけです。空の集合を作るときだけ注意が必要で、{} は空の 辞書 になります。空集合は set() と書きます。

    空の集合から 1 つずつ足していくこともできます。そのときのメソッドは append ではなく add です。同じ値を 2 回足しても増えず、エラーにもならず静かに無視されます。この「入れても増えないことがある」という性質が、重複除去そのものです。

    同じ入力なのに、並びが毎回違って見える

    集合には決定的な弱点があります。順番を持たない ことです。リストは入れた順を守りますが、集合は守りません。

    そのまま返してしまうと、同じ入力から同じ表示が得られる保証がなくなります。人に見せるにも、結果を比べるにも使えません。

    対処は決まっていて、sorted を通します。sorted は集合を受け取っても動き、並びの決まったリスト を返します。

    Python

    print(sorted({"パン", "牛乳", "たまご"}))

    ['たまご', 'パン', '牛乳'] が出ます。日本語の文字列は文字コードの順に並ぶので意味の順ではありませんが、何度実行しても同じ並びになります。ここが大事なところです。

    「重複を消すときは集合、人に見せたり比べたりするときは sorted でリストに戻す」。この 2 段構えを型として覚えると迷いません。

    集合には番号もありません。categories[0] のような取り出し方は TypeError になります。番号で取り出したいなら、先にリストへ変換します。

    やってみよう

    関数 used_categories(records) を実装してください。支出の辞書が並んだリストから category を集め、重複を除いた 並び順の決まったリスト を return します。

    重複を消したあと、必ず sorted でリストにしてから返してください。集合のまま返すと結果が安定しません。空リストを渡されたときは空リスト [] を返します。同じカテゴリが何件あっても、返るのは 1 つだけです。

    要件

    1. 関数名は used_categories で、引数は records の1つ
    2. 各支出の category を集め、set で重複を取り除く
    3. sorted でリストに変換してから return する。集合のまま返さない
    4. 空リストのときは空リストを返す

    ヒント

    空集合は set() で作ります。{} は空の辞書になってしまいます

    集合への追加は add を使います。append ではありません

    最後に return sorted(categories) と書けばリストになります

    set のままだと順番が定まらず、結果が毎回同じになりません

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

    関連レッスン

    • リスト内包表記

      for と if を1行に畳むリスト内包表記で、食費の支出だけを抜き出す

    • タプルアンパック

      2つの値の組を変数に分解して受け取り、品名と金額を1行の文字列にまとめる

    • つくる:カテゴリ別集計

      第7章の総仕上げ。支出をカテゴリごとに合計した辞書を返す total_by_category を作る

    • 第7章クイズ

      リストのメソッド、スライス、辞書のキー、set、内包表記の理解を5問で確認する

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • リスト順序付きで複数の値を扱うデータ構造
    • メソッドクラスに属する関数
    • 文字コード文字に番号を割り当てるルール体系
    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    setで重複除去

    ⌘S で保存