Python タプル 使い方 スクリプトの書き方

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

タプルは、リストによく似た構造のデータです。複数のデータを管理するのに便利で、操作もリストに似ています。異なるのは、データの書き換えが出来ないという点です。タプルを使うための簡単な操作を確認します。インタラクティブシェル(>>>)を使うと確認しやすいです。

スポンサーリンク



Python タプル

Pythonのタプルは、先頭を0番として並べられた複数のデータです。基本的に先頭から順番にオブジェクトを格納します。オブジェクトを入れた場所をインデックスで順番に管理できます。タプルにはリスト同様、いろんな種類のオブジェクトを入れることができます(数値・文字列・リストなど)。大きさは自動で調整されます。データの変更はできません(追加、変更、削除などはできません)

Python タプルの使い方

基本的な操作

タプルの定義

Pythonのタプルは括弧(())で囲みます。タプル内のデータ(要素)はカンマ(,)で区切ります。リストから動的生成も可能です。

  >>> aaa = (1, 2, 3, 4, 5)
  (1, 2, 3, 4, 5)
  >>> bbb = ['A', 'B', 'C']
  ['A', 'B', 'C']
  >>> ccc = tuple(bbb)
  ('A', 'B', 'C')

インデックスによるデータへのアクセス

タプルの要素にアクセスするには、インデックスを指定します。0から順番に番号が振られます。最後から数える場合は、-1, -2…と数えます。

  >>> aaa = (1, 2, 3, 4, 5)
  >>> aaa
  (1, 2, 3, 4, 5)
  >>> aaa[0]
  1
  >>> aaa[-1]
  5

タプルから複数のデータを取り出す場合、コロンを使って範囲を指定します。開始位置・終了位置(含まず)で指定します。省略も可能です。

  >>> aaa = (1, 2, 3, 4, 5)
  >>> aaa[1:3]
  (2, 3)
  >>> aaa[1:]
  (2, 3, 4, 5)
  >>> aaa[:4]
  (1, 2, 3, 4)

データの追加・変更・削除(不可)

タプルのデータ更新はできません。但し、リスト同様、タプル同士を連結して新しいタプルを作ることはできます。スライスなどの操作結果も同様。

  >>> aaa = (1, 2, 3, 4, 5)
  (1, 2, 3, 4, 5)
  >>> aaa + (10,)
  (1, 2, 3, 4, 5, 10)

  >>> aaa + (10, 20, 30)
  (1, 2, 3, 4, 5, 10, 20, 30)
  >>> aaa
  (1, 2, 3, 4, 5)

  >>> bbb = aaa + (10, 20, 30) # 新しいタプルとして
  >>> bbb
  (1, 2, 3, 4, 5, 10, 20, 30)

最大・最小などのユーティリティ

タプルから最大の要素を得るにはmax関数を使います。最小はmin関数です。

  >>> aaa = (1, 2, 3, 4, 5)
  >>> max(aaa)
  5
  >>> min(aaa)
  1

サンプル

タプルを使った、Pythonのスクリプト例です。fastaファイルを読みこんで、出現順とヘッダーのタプルとヘッダー情報を辞書に格納します。最後に出現番号をキーにしてデータ(ヘッダー情報のみ)を取り出します。

tuple_test.py

#! /usr/local/bin/python
# -*- coding: utf-8 -*-

file_name  = "my.fasta"

count = 0
map = {}

f = open(file_name, "r")
for line in f.readlines():
    if line[0] == '>':
        map[tuple([count, "HEADER"])] = line.strip() # 出現順をタプルで管理
        count += 1
        
f.close()

for x in range(0, len(map)):
    print map[(x, "HEADER")][1:] # 出現順のタプルでデータ呼出し

my.fasta

  >cds1
  ATGGTGGGTGGCAAGAAGAAAACCAAGATATGTGACAAAGTGTCACATGA
  TTTGGCAATCGGTTCCTGGATTGGACTTAGACCCCTACGCATCCTCAAAT
  GAAATGTTGCCAACGCTTCTTGAGAGCTGCCCAAAACTTGAATCTCTCAT
  >cds2
  ATGGTTCAATATAATTTCAAGAGGATCACAGTTGTTCCCAATGGGAAGGA
  GCACGTCGTGGTGAAGCTGACAGAGTTATACCAACGCTTAGACCGAAACA
  AACCGACAGGCGTTGA
  >cds3
  ATGACTCGTTTGTTGCCTTACAAAGGTGGAGATTTTTTGGGACCGGATTT
  CCGAGGTATACCTCTACCTTATCTTTCTGAATTAACTGTGAGCTTCATAG
  GCAAAAATTAAGATTGGTGAATGCTCAAAACGTAAAAAGGATAAGCAAGT
  >cds4
  ATGGATTCAGAGTCAGAGTCAAAGCTCATATCATTCATTTCTCAATTAGT
  ATCATGCATGATACAAACAATCTCTCTGGTCAGCTCAATGGATTTGAAGT
  ATCTATTTCGGTAACTTCTTCTCATGTATGCAATGTGATTATATTCTCCA
  >cds5
  ATGTCGGTTCCTCCTAGATTCCGGTCCGTAAATTCCGATGAGCGAGAGTT
  GCTGCAGAGGAAACCACCGGGGATGAAACTGGAGAAGCCGATGATGGAGA
  GAGAGAGAGTGATAAATAA

実行と結果

  $ ls
  my.fasta
  tuple_test.py

  $ python tuple_test.py 
  cds1
  cds2
  cds3
  cds4
  cds5
スポンサーリンク