Pythonで集合を作成するには波かっこやset関数や内包表記を使う。それらの方法と注意点を簡単に紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
# 波かっこを使って集合を作成
s = {0, 1, 2} # 波かっこ内に集合の要素を記述
print(s) # {0, 1, 2}
# 集合の要素は重複しない
s = {0, 0, 1, 2}
print(s) # {0, 1, 2}
# 集合の要素には順序がない
s = {'foo', 'bar', 'baz'}
print(s) # {'foo', 'baz', 'bar'}など
# 集合の要素はハッシュ可能である必要がある
s = {[0, 1], [2, 3]} # TypeError
# set関数を使って集合を作成
s = set() # 空の集合
print(s) # set()
d = {} # {}は空の集合ではなく、空の辞書を作成する
print(s == d) # False
print(type(d)) # <class 'dict'>
s = set(['foo', 'bar', 'baz']) # 集合の要素を含む反復可能オブジェクトを与える
print(s) # {'foo', 'baz', 'bar'}
s = set('foo') # 文字列は反復可能オブジェクト
print(s) # {'f', 'o'}
# 集合内包表記
s = {x * 2 for x in range(4)}
print(s) # {0, 2, 4, 6}
集合を作成するには幾つかの方法がある。
以下ではこれらの方法を見ていこう。
集合を作成する最も簡単な方法は波かっこの内部に、その要素をカンマ区切りで並べていくことだ。以下に例を示す。
s = {0, 1, 2} # 波かっこ内に集合の要素を記述
print(s) # {0, 1, 2}
この例では集合の要素となる3つの整数値をカンマ区切りで並べている。注意したいのは、集合では同一の要素が重複することがない点だ。以下に例を示す。
s = {0, 0, 1, 2}
print(s) # {0, 1, 2}
ここでは、整数値「0」を2つ波かっこの中に記述しているが、同一の要素が重複することがないので、整数値「0」は集合sには1つだけ存在するようになる。
また、集合の要素には順序もない。集合の要素を取り出そうというときにどんな順番でそれらが出現するかは分からない。例えば、以下の集合sは「{'foo', 'bar', 'baz'}」という順番で要素を並べているが、print関数でその内容を表示したときに作成時とは異なる順番で要素が表示されるかもしれない(し、作成時と同じ順番で表示されるかもしれない)。
s = {'foo', 'bar', 'baz'}
print(s) # {'foo', 'baz', 'bar'}など
最後に集合の要素はハッシュ可能である必要がある。文字列や数値はハッシュ可能だが、リストは変更可能でありハッシュ可能ではない。そのため、リストを集合の要素とすることはできない。
以下に例を示す。
s = {[0, 1], [2, 3]} # TypeError
リストを集合の要素としようとすると、TypeError例外が発生する。
set関数を使っても集合は作成できる。特に空の集合は引数を与えずにset関数を呼び出すことで作成する。「{}」は「空の辞書」を作成するのであって、空の集合を作成するわけではないことには注意しよう。
s = set() # 空の集合
print(s) # set()
d = {} # {}は空の集合ではなく、空の辞書を作成する
print(s == d) # False
print(type(d)) # <class 'dict'>
set関数には、集合の要素となる値を格納している反復可能オブジェクトを渡す。以下に例を示す。
s = set(['foo', 'bar', 'baz']) # 集合の要素を含む反復可能オブジェクトを与える
print(s) # {'foo', 'baz', 'bar'}
この例では、'foo'/'bar'/'baz'という3つの文字列を含むリスト(反復可能オブジェクト)をset関数に渡している。そのため、これら3つの要素を含んだ集合が作成される。
なお、文字列はそれ自体が個々の文字を要素とする反復可能オブジェクトだ。そのため、以下のように単体の文字列をset関数に渡すと、文字列を構成する個々の文字が集合の要素となる。
s = set('foo') # 文字列は反復可能オブジェクト
print(s) # {'f', 'o'}
集合では同一要素が重複することはないので、集合に含まれる'o'が1つだけであることにも注意しよう。
集合内包表記は次のような形式で記述する。
{要素を算出する式 for 変数 in 反復可能オブジェクト}
このときには反復可能オブジェクトから変数に取り出した値を使って、要素を計算することになるだろう。以下に例を示す。
s = {x * 2 for x in range(4)}
print(s) # {0, 2, 4, 6}
この例では要素を算出する式は「x * 2」となっている。この変数xにはrange(4)が返送する値が順に代入されるので、式の値は「0 * 2」「1 * 2」「2 * 2」「3 * 2」となる。そのため、この集合には「0」「2」「4」「6」が含まれるようになる。
Copyright© Digital Advantage Corp. All Rights Reserved.