Python set型 使い方 スクリプトの書き方

バイオインフォ道場、くまぞうです。

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'])
スポンサーリンク





ピックアップ記事

  1. awk for 繰り返し処理 簡単なサンプルでわかる インクリメント・デクリメント、変わった繰り返し

    awkのfor文は、カウンタを目印にして処理を繰り返したいときによく使われます。for文では、カウ…
  2. R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

    R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します…
  3. R 使い方 グラフの色 自作のカラーパレットとデフォルトのカラーパレット

    グラフを描画する際、色の組み合わせを1つ1つ考えるのは面倒ですよね。Rには、あらかじめ色の組み合わ…

人気記事

  1. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  2. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  2. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  3. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…