特集PC技術

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

サイト内検索

twitterTwitter

最新ブログ記事

2015年06月13日

JavaScriptの情報室

4冊目 ハイブリッドアプリが作れる。tabris.js

2014年10月16日

C++言語学習録

第3回 ファイルを分割してみよう

2014年10月09日

C++言語学習録

第2回 オブジェクト指向の復習

2014年10月02日

C++言語学習録

第1回 C++の開発環境を整える

2014年09月25日

Swiftを試してみようなう。

第4回 Swiftでクラスを使うなう。

ISL 情報戦略研究所

pagetopこのページの先頭へ戻る