用語比較
集合の演算子とメソッドの違い|| & - ^ と 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どこで迷っているかを切り分ける
{1, 2} | [2, 3] でTypeErrorが出た人
演算子 | は両側が集合であることを要求します。リストを渡したいときは、{1, 2}.union([2, 3]) と書くか、set([2, 3]) で集合にしてから | を使います。
set('abc') & 'cbs' が動かず、理由が分からない人
右側が文字列なので、演算子版はTypeErrorになります。メソッド版の set('abc').intersection('cbs') なら動き、結果は{'b', 'c'}です。
試験で 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
両側が集合か確かめる
両側がすでに集合なら、| & - ^ のどちらの形でも書けます。
- 2
リストや文字列が混ざるならメソッド
片側がリストや文字列なら、メソッド版にそのまま渡せます。演算子で書くなら、先にset()で集合にします。
- 3
記号と演算を対応させる
和は |、積は &、差は -、対称差は ^ です。メソッドの名前と1対1で対応します。
- 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 の違いを例で説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- re.match()とre.search()の違い|文字列の先頭だけ調べるか、どこにあっても探すか(Python3基礎)
re.match()とre.search()の違いを、調べる範囲、結果が
Noneになる場合、MULTILINEとの関係、fullmatch()との違いで解説。Python3エンジニア認定基礎試験の第10章(reモジュール)の確認問題つきです。 - タプルのパックとシーケンスのアンパックの違い|x, y, z = t の動きをPython3エンジニア認定基礎試験で判断する
タプルのパック(t = 1, 2, 3)とシーケンスのアンパック(x, y, z = t)の違いを、公式チュートリアルの記述、左辺の変数の数の条件、複数同時の代入との関係、確認問題まで解説します。
- list.remove()とlist.pop()の違い|値を指定して削除するか、位置を指定して取り出すか(Python3基礎)
list.remove()とlist.pop()の違いを、指定するもの(値か位置か)、返り値、見つからないときのエラー、同じ値が複数あるときの動きで解説。Python3エンジニア認定基礎試験の第5章(リスト)の確認問題つきです。
よくある質問
Q集合の演算子とメソッドの一番大きな違いは何ですか?
引数に渡せるものです。メソッド版は任意のイテラブルを受け付け、演算子版は引数が集合であることを要求します。
Q{1, 2} | [2, 3] はなぜエラーになりますか?
演算子 | は両側が集合であることを要求するためです。リストとの演算はTypeErrorになります。{1, 2}.union([2, 3]) なら動きます。
Qa - b と a ^ b は何が違いますか?
a - b はaにあってbにない要素です。a ^ b はaとbのどちらか一方だけにある要素で、両方にある要素は含みません。
Q公式がメソッド版を用意している理由は何ですか?
標準型の項は、set('abc') & 'cbs' のような間違いやすい書き方を避け、set('abc').intersection('cbs') のほうが読みやすいと説明しています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
