AI資格ドリル
資格を選ぶ

用語比較

集合の演算子とメソッドの違い|| & - ^ と union()・intersection()の引数の扱い(Python3基礎)

集合の演算子 | & - ^ と、union()・intersection()などのメソッドの違いは引数で、メソッドはリストや文字列などの反復可能なオブジェクトを受け取り、演算子は両側が集合でなければエラーになります。

結果の集合は同じで、渡せる引数が違うと区別します。演算子が集合を要求するのは、set('abc') & 'cbs' のような間違いやすい書き方を防ぐためです。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

演算子(| & - ^)とメソッド(union()など)の要点

演算子(| & - ^)

両側が集合のときに使える。片方がリストや文字列だとTypeErrorになる。

メソッド(union()など)

引数に任意のイテラブルを渡せる。リストや文字列をそのまま渡しても動く。

違いを表で確認

比較軸演算子(| & - ^)メソッド(union()など)
引数に渡せるもの集合(setまたはfrozenset)だけリスト、文字列など、任意のイテラブル
リストを渡したときTypeError(例: {1, 2} | [2, 3])動く(例: {1, 2}.union([2, 3])は{1, 2, 3})
記号と名前の対応和は |、積は &、差は -、対称差は ^和はunion()、積はintersection()、差はdifference()、対称差はsymmetric_difference()
読みやすさ式が短く、数学の記号に近い名前が演算の意味を表すので、記号を覚えていなくても読める

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

{1, 2} | [2, 3] でTypeErrorが出た人

演算子 | は両側が集合であることを要求します。リストを渡したいときは、{1, 2}.union([2, 3]) と書くか、set([2, 3]) で集合にしてから | を使います。

02

set('abc') & 'cbs' が動かず、理由が分からない人

右側が文字列なので、演算子版はTypeErrorになります。メソッド版の set('abc').intersection('cbs') なら動き、結果は{'b', 'c'}です。

03

試験で a - b と a ^ b の結果を問われた人

a - b はaにあってbにない要素、a ^ b はどちらか一方だけにある要素です。同じ例で両方を計算して違いを確認します。

具体例で使い分ける

例 1

チュートリアルの例で4つの記号を確認する場合

a = set('abracadabra')、b = set('alacazam') のとき、a - b、a | b、a & b、a ^ b を求める場面です。

  • aの要素は {'a', 'r', 'b', 'c', 'd'}、bの要素は {'a', 'l', 'c', 'z', 'm'} です。
  • a - b はaにあってbにない文字で、{'r', 'd', 'b'} です。a & b は両方にある文字で、{'a', 'c'} です。
  • a | b はどちらかにある文字、a ^ b はどちらか一方だけにある文字です。a ^ b は a | b から a & b を除いた集合になり、{'r', 'd', 'b', 'm', 'z', 'l'} です。

結論: a - b は{'r', 'd', 'b'}、a & b は{'a', 'c'}、a ^ b は{'r', 'd', 'b', 'm', 'z', 'l'}です。表示される順序は実行ごとに違うことがあります。

例 2

リストを渡す場合

s = {1, 2} に対し、s.union([2, 3]) と s | [2, 3] を実行する場面です。

  • メソッド版のunion()は、任意のイテラブルを引数に受け付けます。リスト [2, 3] を渡すと、結果は {1, 2, 3} です。
  • 演算子版の | は、両側が集合であることを要求します。右側がリストなので、TypeErrorになります。
  • リストを集合にしてから s | set([2, 3]) と書けば、演算子でも同じ結果になります。

結論: s.union([2, 3]) は{1, 2, 3}、s | [2, 3] はTypeErrorです。

問題文から答えを選ぶ手順

  1. 1

    両側が集合か確かめる

    両側がすでに集合なら、| & - ^ のどちらの形でも書けます。

  2. 2

    リストや文字列が混ざるならメソッド

    片側がリストや文字列なら、メソッド版にそのまま渡せます。演算子で書くなら、先にset()で集合にします。

  3. 3

    記号と演算を対応させる

    和は |、積は &、差は -、対称差は ^ です。メソッドの名前と1対1で対応します。

  4. 4

    差は左右の順序に注意する

    a - b と b - a は結果が違います。差と対称差の違いは、対称差が左右どちらか一方だけの要素を集める点です。

試験での見分け方

  • 1演算子 | & - ^ は、両側が集合のときに使う。片側がリストや文字列だとTypeErrorになる。
  • 2union()・intersection()・difference()・symmetric_difference()は、任意のイテラブルを引数に受け付ける。
  • 3a - b はaにあってbにない要素、a ^ b はどちらか一方だけにある要素を表す。

誤答しやすい選択肢

演算子でもリストを渡せると考える

修正: {1, 2} | [2, 3] はTypeErrorです。リストを渡すなら{1, 2}.union([2, 3])と書くか、set()で集合にしてから使います。

a - b と a ^ b を同じ結果だと考える

修正: a - b はaだけにある要素です。a ^ b はaだけにある要素とbだけにある要素の両方を含みます。

メソッドは元の集合を書き換えると考える

修正: union()などは新しい集合を返します。元の集合を書き換えるのは、update()や |= のような別の形です。

確認問題

Q1set('abc').intersection('cbs') の結果は何ですか?

答え: {'b', 'c'}

intersection()は文字列も引数に受け付けます。'abc'と'cbs'に共通する文字は'b'と'c'です。表示順は実行ごとに異なることがあります。

Q2{1, 2} | [2, 3] を実行するとどうなりますか?

答え: TypeErrorになる

演算子版は両側が集合であることを要求します。リストとの演算はエラーです。

Q3リスト [2, 3] を渡して、{1, 2} との和集合を求めるメソッド呼び出しはどう書きますか?

答え: {1, 2}.union([2, 3])

union()は任意のイテラブルを引数に受け付けます。結果は{1, 2, 3}です。

到達チェック

  • | & - ^ と4つのメソッドの対応を言える
  • 演算子とメソッドの引数の違いを説明できる
  • リストを渡したときの結果の違いを答えられる
  • a - b と a ^ b の違いを例で説明できる

同じ資格で次に知りたいこと

よくある質問

Q集合の演算子とメソッドの一番大きな違いは何ですか?

A

引数に渡せるものです。メソッド版は任意のイテラブルを受け付け、演算子版は引数が集合であることを要求します。

Q{1, 2} | [2, 3] はなぜエラーになりますか?

A

演算子 | は両側が集合であることを要求するためです。リストとの演算はTypeErrorになります。{1, 2}.union([2, 3]) なら動きます。

Qa - b と a ^ b は何が違いますか?

A

a - b はaにあってbにない要素です。a ^ b はaとbのどちらか一方だけにある要素で、両方にある要素は含みません。

Q公式がメソッド版を用意している理由は何ですか?

A

標準型の項は、set('abc') & 'cbs' のような間違いやすい書き方を避け、set('abc').intersection('cbs') のほうが読みやすいと説明しています。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)