「Pythonの基礎 - 集合の作成と操作」の版間の差分
(→集合の演算) |
(→集合の宣言) |
||
29行目: | 29行目: | ||
<class 'dict'> | <class 'dict'> | ||
<class 'set'> | <class 'set'> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> |
2021年11月16日 (火) 06:48時点における版
概要
Pythonにおける集合とは、辞書の値の無いキーだけの集まりのようなものである。
複数の集合に共通の要素があるのか、片方にあって片方に無いものは何かといった計算をすることができる。
集合の宣言
集合は要素を波括弧{}
で括って宣言する。
集合の要素には、同じ値が複数存在せず、ただ1つだけである。したがって、複数の同じ値を集合の要素に代入しても要素は整理される。
a = {1, 3, 5, 7, 9}
b = {1, 1, 1, 3, 5, 7, 8, 5, 6, 6, 3, 3, 9, 7}
print(type(a))
print(b)
# 出力
<class 'set'>
{1, 3, 5, 6, 7, 8, 9}
また、空集合は値を入れずに波括弧{}で括るのではなく、set関数で作成する。
以下の例では、aは辞書になる。(波括弧{}で括ることは、辞書も集合も同じ)
a = {}
b = set()
print(type(a))
print(type(b))
# 出力
<class 'dict'>
<class 'set'>
※注意点
集合型オブジェクトには、要素の順番が存在しない。
そのため、複数の要素が含まれている場合、どのような順序で並んでいるのかは不定である。
また、集合型オブジェクトには同じ値の要素は1つか格納できないため、同じ値を持つ要素は1つにまとめられる。
以下の例では、集合の要素として、"H" "a" "p" "p" "y"という5つの文字を要素として集合を作成している。
myset = {"H", "a", "p", "p", "y"}
print(myset)
# 出力
{'H', 'y', 'a', 'p'}
集合のメソッド
要素の追加
集合に要素を加えるには、add
関数を使用する。
x = set()
x.add(10)
x.add('Python')
print(x)
# 出力
{10, 'Python'}
要素の削除
また、集合の要素を削除するには、remove
関数を使用する。
集合に指定した値が存在しない場合、KeyError
エラーが発生する。
集合の要素を全て削除するには、clear
関数を使用する。
x = {3, 1, 5, 4, 2}
x.remove(5)
print(x)
x.clear()
print(x)
# 出力
{3, 1, 4, 2}
{}
discard
関数は、引数に指定した値を持つ要素を集合から削除する。
remove
関数と異なり、引数に指定した値が集合に存在しない場合でもエラーは発生しない。
colorset = {"Red", "Green", "Blue"}
colorset.discard("White")
print(colorset)
# 出力
{'Blue', 'Green', 'Red'}
要素の取得
pop
関数は、集合の中のいずれか1つの要素を削除して、その要素を返す。
ただし、どの要素を削除するかは指定することができない。
colorset = {"Red", "Green", "Blue"}
color = colorset.pop()
print(color)
print(colorset)
color = colorset.pop()
print(color)
print(colorset)
# 出力
Green
{'Blue', 'Red'}
Blue
{'Red'}
要素数の取得
len
関数は、引数に指定したオブジェクトの長さや要素の数を取得することができる。
len
関数の引数に集合を指定した場合は、集合に含まれる要素数を取得することができる。
len({"Red", "Green", "Blue"})
len(frozenset([1, 2, 3, 4, 5]))
# 出力
3
5
set関数を使用して集合に変換する
set関数を使用すれば、文字列、リスト、タプル、辞書から重複する要素を取り除いて集合を作成することができる。
以下の例では、重複した要素は整理されているのが分かる。辞書においては、キーが集合に変換されている。
a = set('PythonPython')
b = set(['Python', 'JavaScript', 'PHP', 'Python', 'JavaScript', 'Python'])
c = set(('Python', 'JavaScript', 'PHP', 'C', 'JavaScript', 'Ruby', 'Swift'))
d = set({'x':100, 'y':200, 'z':300})
# 出力
{'P', 'y', 't', 'h', 'o', 'n'}
{'Python', 'JavaScript', 'PHP'}
{'Python', 'JavaScript', 'PHP', 'C', 'Ruby', 'Swift'}
{'x', 'y', 'z'}
集合の演算
積集合
積集合は、両方の集合に共通する要素からなる集合である。
アンパサンド&
またはintersection
関数を使用して求めることができる。
a = {1, 2, 3}
b = {2, 3, 4}
c = a & b
d = a.interseciton(b)
a.intersection_update(b)
print(a)
print(c)
print(d)
# 出力
{2, 3}
{2, 3}
{2, 3}
和集合
和集合は、少なくともどちらかの集合に要素が含まれている集合である。
バーティカルバー|
またはunion
関数を使用して求めることができる。
a = {1, 2, 3}
b = {2, 3, 4}
c = a | b
d = a.union(b)
a.update(b)
print(a)
print(c)
print(d)
# 出力
{1, 2, 3, 4}
{1, 2, 3, 4}
{1, 2, 3, 4}
差集合
差集合は、一方には含まれているがもう一方には含まれていない要素の集合である。
マイナス-
またはdifference
関数で求めることができる。
a = {1, 2, 3}
b = {2, 3, 4}
c = a - b
d = a.difference(b)
a.difference_update(b)
print(a)
print(c)
print(d)
# 出力
{1}
{1}
{1}
XOR (対称差集合)
XORは、どちらか片方に含まれるが両方には含まれない要素の集合である。
キャレット^
またはsymmetric_difference
関数で求めることができる。
a = {1, 2, 3}
b = {2, 3, 4}
c = a ^ b
d = a.symmetric_difference(b)
a.symmetric_difference_update(b)
print(a)
print(c)
print(d)
# 出力
{1, 4}
{1, 4}
{1, 4}