MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

日本発のリナックス企業、ミラクル・リナックスで奮闘する社員のブログです。

ミラクル関連リンク

採用情報

サイト検索

最近のトラックバック

2008年9月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

« VoIP-IP05 | メイン | 実践:中国語が喋れない人の北京出張(後半) »

pilot python Fl.3 - data structure (2) -

先日、社内でのインストールテスト用に Asianux を USB メモリからブートさせるための方法をまとめました(ブート後 NFS インストール)。九十九電機さんで最安値 USB メモリが 1GB 680 円でした。これで良いやと購入してきたのですが、インストール CD が3枚組なので 2GB あれば、全て USB メモリ内に保存できた事に、後日気付きました(T T)

リファレンス:
2.3.7 set(集合) 型
pilot python Fl.2 - data structure (1) -

前回から引き続き、ツリー(Tree) 構造の実現方法です。Python 2.4 から set 型を使って、データの集合を取り扱うことができます。おそらく、他言語でも同名のクラス/オブジェクトがあるようなので、経験のある方は察しが付くかと思います。(ちなみに「集合」を英語にすると set なのですね、初めて知りました(- -#)

WEB+DB PRESS Vol.42 で「アルゴリズム&データ構造入門」の記事によると、「集合」と言う概念は、重複を許可しないデータの集まりを意味するそうです。従って set 型を用いると、データを一意にすることができます。

>>> a_set = set(['a','b','c','d','c','b'])
>>> a_set
set(['a', 'c', 'b', 'd'])
>>> a_set.add('a')
>>> a_set.add('e')
>>> a_set
set(['a', 'c', 'b', 'e', 'd'])
>>> a_set.remove('c')
>>> a_set
set(['a', 'b', 'e', 'd'])

重複するデータを初期化/追加しても、実際には追加されません。Ruby だと Array#uniq メソッドで重複するデータを取り除くことができますが、同様のことを python で行うには、set を使うと実現できます。但し、データの順序を保持しないので、ソートの要否を確認する必要があります。さらに、要素を追加/削除する際は add()/remove() を使います。あとは、以下のような集合演算も容易に実現できます。

>>> a_set
set(['a', 'b', 'e', 'd'])
>>> b_set = set(['c','d','e','f'])
>>> a_set.union(b_set)
set(['a', 'c', 'b', 'e', 'd', 'f'])
>>> a_set.intersection(b_set)
set(['e', 'd'])
>>> a_set.difference(b_set)
set(['a', 'b'])
>>> a_set.symmetric_difference(b_set)
set(['a', 'c', 'b', 'f'])

集合演算と言うと、何となく難しそうと身構えてしまいます。しかしながら、実際に具体化して動作を確認すると、イメージは分かる、、、気がしますよね(^ ^;;

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/12287142

このページへのトラックバック一覧 pilot python Fl.3 - data structure (2) -:

コメント

ちわす。RubyにもSetはあるですのよん。
# require 'set' しないと使えないのだけれども。

takano32 さん、コメントありがとうございます。

仰る通りです。
python の場合、重複するデータを除去するために set 型を用いるようです。
ruby はそんな事しなくても Array#uniq があって便利ですねと言うのが主旨でした。
Array#uniq は、よく使うメソッドかなと勝手に思っています。

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.