バイオインフォ道場、くまぞうです。
Pythonで重複を排除したデータを管理する場合は、set型を使うと便利です。Python2.3以前では、setsモジュールをimportして使います。
スポンサーリンク
Python set型
Pythonのsetは、リストのような表現を使います。データの追加・削除が可能です。ただし、重複したデータが新たに追加されることはありません。また、「&」や「|」を使って、集合演算を行うことが出来ます。しかし、順番という概念はないので、インデックスを指定してデータを取り出したり、スライスで範囲指定を行うことは出来ません。他のプログラミング言語でも同様なデータ構造が準備されているものもあります。
Python set型の使い方
基本的な操作
Python2.3以前では、最初にsetsモジュールをimportしておきます。
import sets
set型の定義
Pythonのset型はset関数
で作ります。Python3.0では、波括弧{}
で囲んで表現できます。
>>> aaa = set([1, 2, 3]) set([1, 2, 3]) >>> bbb = set(['aaa', 'bbb', 'ccc']) set(['aaa', 'bbb', 'ccc'])
データの追加
set型のデータ追加は、add関数
を使います。
>>> aaa = set([1, 2, 3]) set([1, 2, 3]) >>> aaa.add(4) >>> aaa set([1, 2, 3, 4]) >>> aaa.add(4) # 同じものを追加しても変化なし(重複なし) set([1, 2, 3, 4]) >>> aaa = set([1, 2, 3]) >>> aaa |= set([1, 4]) # 「|」(和集合演算)を使って追加 >>> aaa set([1, 2, 3, 4])
データの削除
set型のデータの削除は、remove関数
を使います。ただし、要素として存在しないものを削除しようとするとエラーになります。エラーを生じさせないように処理したい場合は、discard関数
を使うと良いです。
>>> aaa = set([1, 2, 3]) >>> aaa set([1, 2, 3]) >>> aaa.remove(1) >>> aaa set([2, 3]) >>> aaa.discard(2) set([3]) >>> aaa.discard(2) set([3])
便利な操作
Python2.3以前では、最初にsetsモジュールをimportしておきます。
import sets
和集合
和集合の演算は「|」かunion関数
を使います。
>>> aaa = set([1, 2, 3]) >>> bbb = set([1, 4]) >>> aaa | bbb set([1, 2, 3, 4]) >>> aaa.union(bbb) set([1, 2, 3, 4])
共通集合
共通集合の演算は「&」かintersection関数
を使います。
>>> aaa = set([1, 2, 3]) >>> bbb = set([1, 4]) >>> aaa & bbb set([1]) >>> aaa.intersection(bbb) set([1])
差集合
差集合の演算は「-」かdifference関数
を使います。
>>> aaa = set([1, 2, 3]) >>> bbb = set([1, 4]) >>> aaa - bbb set([2, 3]) >>> aaa.difference(bbb) set([2, 3])
サンプル
setを使った、Pythonのスクリプト例です。2つのgeneリストファイルを読みこんでデータをset型で管理します。最後に共通集合を求めます。
sets_test.py
#! /usr/local/bin/python # -*- coding: utf-8 -*- import sets dic = {"list1":set([]), "list2":set([])} for file in ["list1", "list2"]: f = open(file) for line in f.readlines(): gene = line.strip() dic[file].add(gene) # ファイル毎のset型にadd print gene print f.close() print dic["list1"] print dic["list2"] print dic["list1"] & dic["list2"] # 共通集合
list1
gene1 gene2 gene3 gene1 gene2
list1
gene3 gene1 gene4 gene5 gene1
実行と結果
$ ls list1 list2 sets_test.py $ python sets_test.py gene1 gene2 gene3 gene1 gene2 gene3 gene1 gene4 gene5 gene1 set(['gene1', 'gene2', 'gene3']) set(['gene1', 'gene3', 'gene4', 'gene5']) set(['gene1', 'gene3'])
スポンサーリンク