今回は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」の書き方の説明でした。
世界最大の動画学習サイトUdemyのおすすめPython講座【PR】
- AWSで作るWEBアプリケーション 実践講座
- 現役シリコンバレーエンジニアが教えるPython
3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
- 独学で身につけるPython〜基礎編〜【業務効率化・自動化で残業を無くそう!】
- 【完全初心者向け】絶対に挫折させないPython入門講座
- 【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門
- はじめてのPython 少しずつ丁寧に学ぶプログラミング言語Python3のエッセンス
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
- 現役シリコンバレーエンジニアが教えるアルゴリズム・データ構造・コーディングテスト入門