Select Language

AI Technology Community

2.23、Python set集合精講

リストに似て、Pythonの集合もデータの集合であり、要素の型が一致する必要はありません。しかし、集合には以下の2つの特徴があります:

  • 集合内の要素は一意です。例えば、1、2、1、1で集合を構成することはできません。なぜなら、重複する1が含まれているからです。

  • 集合は順序がないため、要素を追加する際に位置を指定することはできません。要素を削除する際も、位置を指定することはできず、値を指定する必要があります。もちろん、位置で要素を特定することもできません。

Pythonで集合を作成する

リストから集合を作成することができます。リスト内の要素をすべて集合に追加しますが、重複する要素は1つだけ残されます。

>>> a = set([1, 1, 3])
>>> a
set([1, 3])  # 重複する要素は破棄されます
>>> type(a)  # 型を確認する<type 'set'>

以下の例は、集合の順序がないことを示しています:

>>> a = set([100, 99, 1, 1, 3])  # リストから集合を構築する
>>> type(a)                      # aの型を取得する<type 'set'>                     # 型は辞書型です
>>> a                            # aの内容を確認する
set([3, 1, 99, 100])             # 追加した順序とは無関係であることがわかります

タプル、辞書、他の集合からも集合を構築することができます。

以下の例は、タプルから集合を構築するものです:

>>> a = set((0, 1, 2, 3, 3, 2))  # タプルから集合を構築する
>>> a                            # 重複する要素は破棄されます
{0, 1, 2, 3}
>>> type(a)                      # 型を確認する<class 'set'>


以下の例は、辞書から集合を構築するものです。辞書のキーを使用して集合を構築し、辞書の値は使用されません:

>>> a = set({1:10, 2:20, 3:30})
>>> a
{1, 2, 3}
>>> type(a)<class 'set'>


以下の例は、文字列から集合を構築するものです。文字列の各文字が集合の要素になります:

>>> a = set("abcdefabc")  # 文字列を入力として集合を作成する
>>> a                     # aの内容を確認する
{'c', 'e', 'f', 'b', 'd', 'a'}
>>> type(a)               # aの型を確認する<class 'set'>


以下の例は、別の集合から集合を構築するものです:

>>> a = set([1, 2, 3])  # 3つの要素を持つ集合
>>> b = set(a)          # 集合aを入力として、新しい集合bを作成する
>>> b                   # bの値を確認する
{1, 2, 3}
>>> type(b)             # bの型を確認する<class 'set'>


もちろん、set()を使用して空の集合を作成することもできます。空の集合には要素がありません。

>>> a = set()  # 空の集合を作成する
>>> type(a)    # 型を確認する<class 'set'>
>>> len(a)     # 要素の数を取得する
0

Python集合の基本操作

1) 要素を追加する——add(値)

この関数は、1つの要素のみを追加することができます。

>>> a = set()   # 空の集合を構築する
>>> a.add(1)    # 要素1を追加する
>>> a           # aの値を確認する
set([1])        # 確かに1つの要素1を含んでいます
>>> a.add(100)  # 要素100を再度追加する
>>> a           # 現在のaの値を確認する
set([1, 100])   # 2つの要素を含んでいます


追加する要素がすでに集合に存在する場合、何も変化は起こりません。

>>> a           # aは1と100を含む集合です
set([1, 100])   # aの内容
>>> a.add(100)  # 重複する要素100を追加する
>>> a           # aには何も変化がありません
set([1, 100])

2) 要素を削除する——discard(値)

この関数は、集合内の指定された値に対応する要素を削除します。

>>> a = set([1, 2, 3])
>>> a
set([1, 2, 3])
>>> a.discard(1)
>>> a
set([2, 3])

指定された値が集合内に存在しない場合、何も操作は行われません。

>>> a
set([2, 3])
>>> a.discard(100)
>>> a
set([2, 3])

3) 指定された値を削除する——remove(値)

この関数は、discard()と異なり、指定された値が集合内に存在しない場合、例外が発生します。

>>> a = set([1, 2, 3])
>>> a.remove(1)
>>> a
set([2, 3])
>>> a.remove(10)  # 存在しない要素10を削除すると、KeyError例外が発生します
Traceback (most recent call last):
  File "", line 1, in KeyError: 10

4) すべての要素をクリアする——clear()

この関数は、すべての要素を削除します。この関数を実行すると、集合は空の集合になります。

>>> a = set([1, 2, 3])
>>> a
set([1, 2, 3])
>>> a.clear()
>>> a
set([])
>>> a.clear()
>>> a
set([])

5) 最初の要素を削除する——pop()

集合に要素がある場合、削除された要素の値が返されます。

>>> a = set([1, 2, 3])
>>> a.pop()
1
>>> a
set([2, 3])

集合が空の場合、例外が発生します。

>>> a = set([])
>>> len(a)
0
>>> a
set([])
>>> a.pop()
Traceback (most recent call last):
  File "", line 1, in KeyError: 'pop from an empty set'

6) 共通要素があるか——isdisjoint()

この関数は、集合aと集合bの両方に属する要素があるかどうかを判断します。そのような要素がある場合、Falseを返します。それ以外の場合はTrueを返します。

>>> a = set([1, 2, 3, 4])
>>> b = set([1, 2, 10, 20])
>>> a.isdisjoint(b)
False
>>> c = set([100, 200])
>>> a.isdisjoint(c)
True

7) 指定された集合の部分集合か——issubset()

aがbの部分集合であるとは、集合aのすべての要素が集合bに属していることを意味します。

>>> a = set([1, 2])
>>> b = set([1, 2, 10, 20])
>>> a.issubset(b)  # 集合aは集合bの部分集合か
True               # はい
>>> c = set([1, 10, 20, 30, 40])
>>> a.issubset(c)
False

aがbに等しい場合、aとbは互いに部分集合になります。

>>> a = set([1, 2])  # 集合aと集合bの値は同じですが、異なるオブジェクトです
>>> id(a)            # 集合aのid
49020712
>>> b = set([2, 1])
>>> id(b)            #
post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。