Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はPythonにおける「A|B」と「A|=B」という書き方についての解説です。これはどちらもAとBという2つの集合(集合型オブジェクト)を使った、論理和の演算子「|」を使った記述です。
公式ドキュメント:Set(集合)型のclass frozenset([iterable]
上の公式ドキュメントでは、
順序なしコレクション
コレクションには順序がないので、集合は挿入の順序や要素の位置を記録しません。従って、集合はインデクシング、スライシング、その他のシーケンス的な振舞いをサポートしません。
と説明されています。
簡単にいえば、なんらかのデータが集まっただけでのもの(中身が空の集合も含む)で、要素の順番は情報として持たないものです。つまりリストとは異なり、順番を指定して「X番目にある要素を取り出す」ということはできません。
またこの集合型には、
の2つが存在します。
このうちset型は、
class set([iterable])
と定義されています。引数であるイテラブルオブジェクトを使って1つの集合を作り出します。イテラブルとイテレーターの違いについては次の記事を見てください。
上公式ドキュメントでは、
union(*others)
set | other | …
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つずつあるわけですが、それぞれひとまとめの扱いになっていることが確認できます。
上述のことがわかれば、「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」の書き方の説明でした。