Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

How to use a bitwise or operator in Python with set-type objects

Pythonの「A|B」と「A|=B」とは?その基本の解説

Pythonにおける論理和演算子を使った「A | B」と「A |= B」の解説

今回はPythonにおける「A|B」と「A|=B」という書き方についての解説です。これはどちらもAとBという2つの集合(集合型オブジェクト)を使った、論理和の演算子「|」を使った記述です。

公式ドキュメント:Set(集合)型のclass frozenset([iterable]

Pythonの集合型とは?

定義

上の公式ドキュメントでは、

順序なしコレクション

コレクションには順序がないので、集合は挿入の順序や要素の位置を記録しません。従って、集合はインデクシング、スライシング、その他のシーケンス的な振舞いをサポートしません。

と説明されています。

簡単にいえば、なんらかのデータが集まっただけでのもの(中身が空の集合も含む)で、要素の順番は情報として持たないものです。つまりリストとは異なり、順番を指定して「X番目にある要素を取り出す」ということはできません。

集合型の種類

またこの集合型には、

  • ミュータブルなset型
  • イミュータブルなfrozenset型

の2つが存在します。

このうちset型は、

class set([iterable])  

と定義されています。引数であるイテラブルオブジェクトを使って1つの集合を作り出します。イテラブルとイテレーターの違いについては次の記事を見てください。

Pythonの「A|B」について

A|Bの意味

上公式ドキュメントでは、

union(*others)

set | other | …

set と全ての other の要素からなる新しい集合を返します。

という記述があります。

これは、

  • unionメソッドを使って書く
  • set | otherというように、論理和の演算子「|」を使って書く

のうちどちらかの書き方をすれば、なんらかの集合であるset となんらかの集合であるother の要素から構成される新しい集合が作成できるということです。

使用例

ではさっそく次の使用例を見てください。


set(['a', 'b']) | set(['b', 'c'])

組み込み関数のset()関数を使って集合を作っています。その引数はイテラブルオブジェクトの1種であるリストオブジェクトを指定しています。

その2つの集合を論理和演算子「|」を使って操作しています。

できあがる集合の結果は、

{'b', 'a', 'c'}

となります。

2つの集合には要素bがそれぞれ含まれていますが、その共通要素はまとめて1つという扱いになっています。これが「A | B」の特徴です。またアルファベット順に並んでいるわけでもないですね。

unionメソッドを使った書き方も見ておきましょう。

set1:set = set(['a', 'b'])
set1.union(set(['b', 'c']))

結果は、

{'b', 'a', 'c'}

となりました。

次に3つの集合を使ってみましょう。

set(['a', 'b']) | set(['b', 'c']) | set(['b', 'c', 'e'])

結果は、

{'b', 'e', 'c', 'a'}

となり、bとcは2つずつあるわけですが、それぞれひとまとめの扱いになっていることが確認できます。

Pythonの「A|=B」について

上述のことがわかれば、「A | =B」についても容易に理解できます。

update(*others)

set |= other | …

全ての other の要素を追加し、 set を更新します。

具体例を見ていきましょう。

set1=set(['a', 'b'])
set1 |= set(['b', 'c'])
set1

結果は、

{'b', 'a', 'c'}

上のコードの注意点ですが、

set(['a', 'b']) |= set(['b', 'c'])

という形にはできません。

「=」を使う代入文では、その左辺に関数(引数)をつかって、

関数(引数) = ~

という形にはできないからです。こうすると、エラー「SyntaxError: cannot assign to function call」が表示されます。(上の「A|B」の場合は「=」を使った代入文になっていないのでOKです)

最初の集合型のうちset型オブジェクトであるset1の中身が更新されています。集合型のうちset型はミュータブルなので中身の変更が可能だからです。

次にupdateメソッドを使った書き方も見ておきましょう。

set1=set(['a', 'b'])
set1.update(*('b', 'c'))
set1

結果は、

{'b', 'a', 'c'}

以上、簡単ながらPythonにおける「A|B」と「A|=B」の書き方の説明でした。