- トップページ
- 特集PC技術
- Pythonを学ぼう
- 第17回 セットの操作
Pythonを学ぼう
第17回 セットの操作
1.セットの読み込み
セットは、順序の保証がないオブジェクトです。
そのため、リストのように、インデックスを指定して特定の要素を取得することはできません。
セットの個々の要素を取り出すには、for文を使用します。
for文はループ処理を行うための構文です。
for文の詳細は、以降の回で説明します。
ここでは、セットの要素を取り出すために使用する構文だと思ってください。
使用方法は次のプログラムを見てください。
# coding: utf-8 a = set([1, 5, 2]) # for文を使ってセットの個々の要素を取り出す for x in a: print(x) |
実行結果
1
2
5
実行結果の通り、セットは順序の保証がないオブジェクトのため、セットを定義した順番に取り出せません。
2.セットの更新
要素を追加する
次の構文を使用すると、要素を追加できます。
.add(要素)
使用方法は次のプログラムを見てください。
# coding: utf-8 a = set([1, 5, 2]) # 要素10を追加する a.add(10) print(a) # 要素10をもう一度追加する a.add(10) print(a) |
実行結果
set([1, 2, 10, 5])
set([1, 2, 10, 5])
実行結果の通り、追加する要素がセット内にすでに存在している場合は、
何も追加されません。エラーも発生しません。
代入演算子を使用する
代入演算子とは、'='のように左辺の値を右辺の値に入れるときに使用する演算子です。
セットでは、次の代入演算子を使用することができます。
セット |= セット
セット &= セット
セット -= セット
セット ~= セット
代入演算子であれば、フローズンセットを使用することができます。
使用方法は次のプログラムを見てください。
# coding: utf-8 a = set([1, 5, 2]) # 和集合 a |= set([3, 4, 5]) print(a) # 共通集合 a &= set([4, 5, 6]) print(a) # 差集合 a -= set([5, 6, 7]) print(a) # 対象差 a ^= set([2, 3, 4]) print(a) # フローズンセットで更新する b = frozenset([1, 2, 3]) b |= set([4]) print(b) |
実行結果
set([1, 2, 3, 4, 5])
set([4, 5])
set([4])
set([2, 3])
frozenset([1, 2, 3, 4])
実行結果より、フローズンセットを使用することが確認できます。
ただし、フローズンセットは、変更不可なオブジェクトのため、
元のフローズンセットを更新するのではなく、新しいフローズンセットを作成して代入しています。
3.セットの削除
removeで削除する
次の構文を使用すると、指定した要素を削除できます。
.remove(要素)
使用方法は次のプログラムを見てください。
# coding: utf-8 a = set([1, 5, 2]) # 存在する要素を削除する a.remove(2) print(a) # 存在しない要素を削除する a.remove(2) print(a) |
実行結果
set([1, 5])
Traceback (most recent call last):
:
KeyError: 2
セットの中に指定した要素が存在しない場合は、エラーが発生します。
discardで削除する
次の構文を使用すると、指定した要素を削除できます。
removeとの違いは、指定した要素が存在しない場合でもエラーが発生しません。
.discard(要素)
使用方法は次のプログラムを見てください。
# coding: utf-8 a = set([1, 5, 2]) # 存在する要素を削除する a.discard(2) print(a) # 存在しない要素を削除する a.discard(2) print(a) |
実行結果
set([1, 5])
set([1, 5])
すべての要素を削除する
次の構文を使用すると、すべての要素を削除できます。
.clear()
使用方法は次のプログラムを見てください。
# coding: utf-8 a = set([1, 5, 2]) # すべての要素を削除する a.clear(); print(a) |
実行結果
set([])
4.その他のセットの操作
他にさまざまなセットの操作があります。
その一例として、次の構文があります。
len(セット)
.issubset(iterableオブジェクト)
.issuperset(iterableオブジェクト)
検索する要素 in セット
使用方法は次のプログラムを見てください。
# coding: utf-8 a = set([1, 5, 2]) # セットの長さを調べる print(len(a)) # セットの全要素が指定したオブジェクトに含まれているかを調べる print(a.issubset([1, 5, 2, 4])) print(a.issubset([1, 5])) # 指定したオブジェクトの全要素がセットに含まれているかを調べる print(a.issuperset([1, 5])) print(a.issuperset([1, 5, 4])) # 指定の要素が含まれているか調べる print(2 in a) print(4 in a) |
実行結果
3
True
False
True
False
True
False
5.Javaとの比較
Pythonのsetの機能は、Javaでは、java.util.HashSetクラスに似ているため、
このクラスとの比較をします。
Javaを知っている方は参考にしてください。
Python | Java |
---|---|
# coding: utf-8 # セットの作成 a = set(['a', 'b', 'c']) # セットの読み込み for x in a: print(x) # セットの更新 a.add('d') print(a) # セットの削除 a.remove('d') print(a) |
import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; public class Java17 { public static void main(String[] args) { // セットの作成 ArrayList list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); HashSet a = new HashSet(list); // セットの読み込み Iterator it = a.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // セットの更新 a.add("d"); System.out.println(a); // セットの削除 a.remove("d"); System.out.println(a); } } |
コメントの投稿
トラックバックURL
http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1775