MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Pythonの基礎 - 集合の作成と操作のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Pythonの基礎 - 集合の作成と操作
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Pythonにおける集合とは、辞書の値の無いキーだけの集まりのようなものである。<br> 複数の集合に共通の要素があるのか、片方にあって片方に無いものは何かといった計算をすることができる。<br> <br><br> == 集合の宣言 == 集合は要素を波括弧<code>{}</code>で括って宣言する。<br> 集合の要素には、同じ値が複数存在せず、ただ1つだけである。したがって、複数の同じ値を集合の要素に代入しても要素は整理される。<br> <syntaxhighlight lang="python"> 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} </syntaxhighlight> <br> また、空集合は値を入れずに波括弧{}で括るのではなく、set関数で作成する。<br> 以下の例では、aは辞書になる。(波括弧{}で括ることは、辞書も集合も同じ)<br> <syntaxhighlight lang="python"> a = {} b = set() print(type(a)) print(type(b)) # 出力 <class 'dict'> <class 'set'> </syntaxhighlight> <br> <u>※注意点</u><br> <u>集合型オブジェクトには、要素の順番が存在しない。</u><br> <u>そのため、複数の要素が含まれている場合、どのような順序で並んでいるのかは不定である。</u><br> <u>また、集合型オブジェクトには同じ値の要素は1つか格納できないため、同じ値を持つ要素は1つにまとめられる。</u><br> <br> 以下の例では、集合の要素として、"H" "a" "p" "p" "y"という5つの文字を要素として集合を作成している。<br> <syntaxhighlight lang="python"> myset = {"H", "a", "p", "p", "y"} print(myset) # 出力 {'H', 'y', 'a', 'p'} </syntaxhighlight> <br><br> == 集合のメソッド == ==== 要素の追加 ==== 集合に要素を加えるには、<code>add</code>関数を使用する。<br> <syntaxhighlight lang="python"> x = set() x.add(10) x.add('Python') print(x) # 出力 {10, 'Python'} </syntaxhighlight> <br> ==== 要素の削除 ==== また、集合の要素を削除するには、<code>remove</code>関数を使用する。<br> 集合に指定した値が存在しない場合、<code>KeyError</code>エラーが発生する。<br> <br> 集合の要素を全て削除するには、<code>clear</code>関数を使用する。<br> <syntaxhighlight lang="python"> x = {3, 1, 5, 4, 2} x.remove(5) print(x) x.clear() print(x) # 出力 {3, 1, 4, 2} {} </syntaxhighlight> <br> <code>discard</code>関数は、引数に指定した値を持つ要素を集合から削除する。<br> <code>remove</code>関数と異なり、引数に指定した値が集合に存在しない場合でもエラーは発生しない。<br> <syntaxhighlight lang="python"> colorset = {"Red", "Green", "Blue"} colorset.discard("White") print(colorset) # 出力 {'Blue', 'Green', 'Red'} </syntaxhighlight> <br> ==== 要素の取得 ==== <code>pop</code>関数は、集合の中のいずれか1つの要素を削除して、その要素を返す。<br> ただし、どの要素を削除するかは指定することができない。<br> <syntaxhighlight lang="python"> colorset = {"Red", "Green", "Blue"} color = colorset.pop() print(color) print(colorset) color = colorset.pop() print(color) print(colorset) # 出力 Green {'Blue', 'Red'} Blue {'Red'} </syntaxhighlight> <br> ==== 要素数の取得 ==== <code>len</code>関数は、引数に指定したオブジェクトの長さや要素の数を取得することができる。<br> <code>len</code>関数の引数に集合を指定した場合は、集合に含まれる要素数を取得することができる。<br> <syntaxhighlight lang="python"> len({"Red", "Green", "Blue"}) len(frozenset([1, 2, 3, 4, 5])) # 出力 3 5 </syntaxhighlight> <br><br> == set関数を使用して集合に変換する == set関数を使用すれば、文字列、リスト、タプル、辞書から重複する要素を取り除いて集合を作成することができる。<br> <br> 以下の例では、重複した要素は整理されているのが分かる。<br> <u>辞書型においては、キーが集合に変換されている。</u><br> <syntaxhighlight lang="python"> 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'} </syntaxhighlight> <br> リストから集合を生成するには、set型またはfrozenset型のオブジェクト生成時にリストを引数に指定する。<br> <syntaxhighlight lang="python"> mylist = ["A", "B", "C"] # リストの生成 myset = set(mylist) # リストから集合を生成 print(myset) # 出力 {'B', 'C', 'A'} </syntaxhighlight> <br> タプルから集合を作成するには、set型またはfrozenset型のオブジェクト生成時にタプルを引数に指定する。<br> <syntaxhighlight lang="python"> mytuple = ("A", "B", "C") # タプルの生成 myset = set(mytuple) # タプルから集合を生成 print(myset) # 出力 {'B', 'C', 'A'} </syntaxhighlight> <br> <code>range</code>型から集合を作成するには、set型またはfrozenset型のオブジェクト生成時に、<code>range</code>型のオブジェクトを引数に指定する。<br> <br> <code>range</code>型とは、コンストラクタで引数に指定した開始値から終了値までの連続した数値を持つオブジェクトのことである。<br> 開始値から終了値までの連続した数値を要素として持つ。開始値を省略した場合は、<code>0</code>が開始値となる。<br> class range(<終了値>) class range(<開始値>, <終了値>[, <ステップ値>]) <br> <syntaxhighlight lang="python"> myset = set(range(10)) print(myset) # 出力 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} </syntaxhighlight> <br><br> == 集合の演算 == ===== 積集合 ===== 積集合は、両方の集合に共通する要素からなる集合である。<br> アンパサンド<code>&</code>または<code>intersection</code>関数を使用して求めることができる。<br> <syntaxhighlight lang="python"> 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} </syntaxhighlight> <br> ===== 和集合 ===== 和集合は、少なくともどちらかの集合に要素が含まれている集合である。<br> バーティカルバー<code>|</code>または<code>union</code>関数を使用して求めることができる。<br> <syntaxhighlight lang="python"> 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} </syntaxhighlight> <br> ===== 差集合 ===== 差集合は、一方には含まれているがもう一方には含まれていない要素の集合である。<br> マイナス<code>-</code>または<code>difference</code>関数で求めることができる。<br> <syntaxhighlight lang="python"> 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} </syntaxhighlight> <br> ===== XOR (対称差集合) ===== XORは、どちらか片方に含まれるが両方には含まれない要素の集合である。<br> キャレット<code>^</code>または<code>symmetric_difference</code>関数で求めることができる。<br> <syntaxhighlight lang="python"> 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} </syntaxhighlight> <br><br> == 集合と他の集合との関係 == 集合と集合が等しいかどうか、また、集合が他の集合の部分集合かどうか等、集合と他の集合との関係を確認する方法について記載する。<br> <br> ==== 集合が他の集合と等しいかどうか ==== 比較演算子の<code>==</code>または<code>!==</code>で比較することができる。<br> <br> 集合Aの要素が集合Bに全て含まれており、集合Bの要素が集合Aに全て含まれている場合、Trueとなる。<br> <syntaxhighlight lang="python"> set1 = {"A", "B", "C"} set2 = {"B", "C", "A"} print(set1 == set2) # 出力 True </syntaxhighlight> <br> ==== 部分集合 ==== 比較演算子の<code><=</code>および<code>issubset</code>関数で比較することができる。<br> <br> 集合Aの要素が全て集合Bに含まれている場合、集合Aは集合Bの部分集合であるという。<br> <br> 以下の例では、集合set1は集合set2の部分集合であるが、集合set2は集合set1の部分集合ではない。<br> 集合set1と集合set3が等しい場合いおいても、集合set1は集合set3の部分集合となる。<br> <syntaxhighlight lang="python"> set1 = {"A", "B"} set2 = {"B", "D", "C", "A"} set3 = {"B", "A"} print(set1 <= set2) print(set2 <= set1) print(set1 <= set3) print(set1.issubset(set2)) # 集合set1が集合set2の部分集合の場合、Trueとなる # 出力 True False True True </syntaxhighlight> <br> ==== 真部分集合 ==== 比較演算子の<code><</code>で比較することができる。<br> <br> 集合Aの要素が全て集合Bに含まれており、かつ、集合Aと集合Bが等しくない場合、集合Aは集合Bの真部分集合であるという。<br> <br> 以下の例では、集合set1は集合set2の真部分集合であり、集合set1と集合set3は真部分集合ではない。<br> <syntaxhighlight lang="python"> set1 = {"A", "B"} set2 = {"B", "D", "C", "A"} set3 = {"A", "B"} print(set1 < set2) print(set2 < set1) print(set1 < set3) # 出力 True False False </syntaxhighlight> <br> ==== 超集合 ==== 比較演算子の<code>>=</code>および<code>issuperset</code>関数で比較することができる。<br> <br> 集合Bの要素が全て集合Aに含まれている場合、集合Aは集合Bの超集合であるという。<br> <br> 以下の例では、集合set1は集合set2の超集合ではないが、集合set2は集合set1の超集合である。<br> 集合set1と集合set3が等しい場合も、集合set1は集合set3の超集合となる。<br> <syntaxhighlight lang="python"> set1 = {"A", "B"} set2 = {"B", "D", "C", "A"} set3 = {"B", "A"} print(set1 >= set2) print(set2 >= set1) print(set1 >= set3) print(set3 >= set1) print(set2.issuperset(set1)) # 出力 False True True True True </syntaxhighlight> <br> ==== 真超集合 ==== 比較演算子の<code>></code>で比較することができる。<br> <br> 集合Bの要素が全て集合Aに含まれており、かつ、集合Aと集合Bが等しくない場合、集合Aは集合Bの真超集合であるという。<br> <br> 以下の例では、集合set1は集合set2の真超集合ではないが、集合set2は集合set1の真超集合である。<br> また、集合set1と集合set3が等しい場合も真超集合ではない。<br> <syntaxhighlight lang="python"> set1 = {"A", "B"} set2 = {"B", "D", "C", "A"} set3 = {"A", "B"} print(set1 > set2) print(set2 > set1) print(set1 > set3) # 出力 False True False </syntaxhighlight> <br> ==== 互いに素 ==== set型およびfrozenset型にある<code>isdisjoint</code>関数で比較することができる。<br> <br> 集合Aと集合Bが同じ要素を1つも持たない時、集合Aは集合Bと互いに素であるという。<br> <br> 以下の例では、集合set1は集合set2は共通の要素がないので互いに素であるが、<br> 集合set1と集合set3、および、集合set2と集合set3は共通する要素があるため互いに素ではない。<br> <syntaxhighlight lang="python"> set1 = {"A", "B"} set2 = {"C", "D", "E"} set3 = {"A", "C"} print(set1.isdisjoint(set2)) print(set1.isdisjoint(set3)) print(set2.isdisjoint(set3)) # 出力 True False False </syntaxhighlight> <br><br> == 集合に指定した値と同じ要素が含まれているか確認する == 集合に対して、指定した値と同じ要素が含まれているかどうか確認する方法について記載する。<br> <br> 要素が含まれているかどうかを確認するには、<code>in</code>演算子または<code>not in</code>演算子を使用する。<br> <br> <code>in</code>演算子は、集合の要素に指定した値と同じ値の要素が存在する場合は<code>True</code>、存在しない場合は<code>False</code>となる。<br> <code>not in</code>演算子は、集合の要素に指定した値と同じ値の要素が存在しない場合は<code>True</code>、存在する場合は<code>False</code>となる。<br> <syntaxhighlight lang="python"> myset = {"A", "B", "C"} print("A" in myset) print("D" in myset) print("D" not in myset) # 出力 True False True </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Python]]
Pythonの基礎 - 集合の作成と操作
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse