Pythonの集合を扱っていきましょう。
集合というと、学生時代の数学でも集合理論といったものは出てきましたよね。内容としてはまさにそれです。
形的には、辞書型の値の無いキーだけの集まりのような表現をします。
複数の集合に共通の要素があるのか、片方にあって片方に無いものは何かといった計算をすることになります。
説明よりも実際に扱ってみる方が理解しやすいでしょうから、早速やっていきましょう。
集合の作成
集合は要素を波括弧{}で括って作ります。辞書型のキーだけのような形ですね。
具体的にこんな感じです。
a = {1, 3, 5, 7, 9}
type(a)
対話型シェルで確認してみましょう。
type()で確認してみると「set」ということで集合であることがわかります。
集合の中に同じ値が複数あることはありません。一つだけです。ですから、いくつも同じ値を集合の中に入れても、集合は整理されます。
実際に見てみましょう。
a = {1,1,1,3,5,7,8,5,6,6,6,3,3,3,9,7,4}
いつくも同じ数値が入っているのがわかりますね。これを確認してみましょう。
集合では重複したデータが整理されているのがわかりますね。
空集合は値を入れずに波括弧で括るのではなく、set()で作ります。
a = {}
b = set()
どちらも同じ意味に見えますが、実行して確認してみましょう。
aは辞書型になっています。波括弧で括ることが辞書型も集合も同じなので、集合での空集合はset()と表現します。
集合のメソッド
Pythonの集合に要素を加えるにはadd()使うことでできます。
空集合を作って、2つ要素を入れるコードを書いてみます。
x = set()
x.add(10)
x.add('Python')
実行してみるとこうなります。
順に要素が集合に入っているのがわかりますね。
集合の要素を削除するにはremove()を使います。要素を全て削除するにはclear()を使います。
x = {1, 2, 3, 4, 5}
x.remove(5)
x.clear()
実行するとこうなります。
remove()で指定の要素が削除され、clear()で空集合になっているのがわかります。
set()を使って集合に変換
集合はset()を使うといろんな文字列、リスト、タプル、辞書から重複する要素を取り除いて作成することができます。
順にこういったコードがかけると思います。
set('PythonPython')
set(['Python', 'Java', 'PHP', 'Python', 'JavaScript', 'Python'])
set(('Python', 'Java', 'PHP', 'C', 'JavaScript', 'Ruby', 'Swift'))
set({'x':100, 'y':200, 'z':300})
Pythonシェルで実行してみましょう。
重複した要素は整理されているのがわかります。辞書型に関してはキーが集合に使われます。
集合の演算
2つの集合を用意して、集合の演算をやってみましょう。
a = {1, 2, 3}
b = {2, 3, 4}
この二つの集合を例に操作してみましょう。
積集合
まずは積集合です。積集合は、両方の集合に共通する要素からなる集合です。&記号かintersection()を使って求めることができます。
a = {1, 2, 3}
b = {2, 3, 4}
a & b
a.interseciton(b)
実行するとこうなります。
共通部分が取り出されているのがわかります。
和集合
次は和集合です。和集合は、少なくともどちらかの集合に要素が含まれているものの集合です。|記号かunion()を使って求めることができます。
a = {1, 2, 3}
b = {2, 3, 4}
a | b
a.union(b)
実行するとこうなります。
両方の集合がまとめられているのがわかります。
差集合
次は差集合です。差集合は一方には含まれているが、もう一方には含まれていない要素の集合です。-記号とdifference()で求められます。
a = {1, 2, 3}
b = {2, 3, 4}
a - b
a.difference(b)
実行するとこうなります。
aには入っているが、bには入っていない要素の集合が得られています。
排他的OR
排他的ORは、どちらか片方に含まれるが、両方には含まれない要素の集合です。^記号とsymmetric_difference()を使うことで得られます。
a = {1, 2, 3}
b = {2, 3, 4}
a ^ b
a.symmetric_difference(b)
実行するとこうなります。
aだけに含まれる要素とbだけに含まれる要素が取り出されているのがわかります。
まとめ
集合は重複しない要素の集まりです。Pythonでは、波括弧{}で括ることで表現します。
空集合は{}と書くと辞書型になってしまうので、set()と表現します。
set()、add()、remove()、clear()で集合の要素を操作できます。set()を使うと文字列、リスト、タプル、辞書を集合に変換すすことができます。
学生時代に学んだ集合理論を思い出すと理解しやすいでしょう。積集合、和集合、差集合、排他的ORで集合の演算ができます。