Python を使用して DNA ストランドの逆補完を取得する

Aditya Raj 2023年1月30日
  1. DNA 鎖の逆相補
  2. Python の for ループを使用して DNA ストランドの逆補完を取得する
  3. Python で join() メソッドを使用して DNA ストランドの逆補数を取得する
  4. Python で get() メソッドを使用して DNA ストランドの逆補数を取得する
  5. Python でリスト内包表記を使用して DNA 鎖の逆補完を取得する
  6. Python で translate() メソッドを使用して DNA ストランドの逆補数を取得する
  7. Python の Biopython モジュールを使用して DNA 鎖の逆相補体を取得する
  8. まとめ
Python を使用して DNA ストランドの逆補完を取得する

Python で科学的なタスクに取り組んでいる間、特定のタスクを実行する必要があります。この記事では、Python を使用して DNA 鎖の逆相補体を取得するさまざまな方法について説明します。

DNA 鎖の逆相補

DNA 鎖は、主にアデニン(A)、チミン(T)、グアニン(G)、シトシン(C)の 4 種類の塩基で表されます。他の種類の基地もあるかもしれません。

各 DNA 鎖は、一連の文字 A、T、G、および C で表されます。たとえば、ACGTAATTGGCC は DNA 鎖の 1つである可能性があります。

DNA 鎖の補体を取得するには、元の鎖の A を T に、C を G に、G を C に、T を A に置き換えます。たとえば、ACGTAATTGGCC の補数は TGCATTAACCGG です。

DNA 鎖の補集合を逆にするために、DNA 鎖の補集合の文字を逆にします。したがって、逆補数は GGCCAATTACGT になります。

ここで、Python を使用して DNA 文字列の逆補数を取得する方法について説明します。

Python の for ループを使用して DNA ストランドの逆補完を取得する

次の手順に従って、Python の for ループを使用して DNA 鎖の逆補数を取得します。

  • まず、出力文字列を格納するために、reversed_strand という名前の空の文字列を定義します。
  • 次に、len() 関数を使用して入力 DNA 鎖の長さを見つけます。len() 関数は、DNA 鎖の文字列を受け取り、長さを返します。
  • その後、for ループを逆の順序で使用して、入力された DNA 鎖の文字を繰り返し処理します。
  • 反復中に、文字 A に遭遇した場合、reversed_strand に T を追加します。同様に、シーケンスで A、C、および G に遭遇した場合、reversed_strand に T、G、および C を追加します。
  • 入力 DNA 鎖に他の文字が見つかった場合は、同じ文字を reversed_strand に追加します。
  • for ループを実行した後、変数 reversed_strand で逆 DNA 鎖を取得します。

これは、次の例で確認できます。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    if character == "A":
        reversed_strand = reversed_strand + "T"
    elif character == "T":
        reversed_strand = reversed_strand + "A"
    elif character == "G":
        reversed_strand = reversed_strand + "C"
    elif character == "C":
        reversed_strand = reversed_strand + "G"
    else:
        reversed_strand = reversed_strand + character
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

出力:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

Python で join() メソッドを使用して DNA ストランドの逆補数を取得する

上記のアプローチでは、reversed_strand を作成するときに、入力 DNA ストランドの文字ごとに新しい文字列が作成されます。入力 DNA 鎖が長すぎる場合、これは時間とメモリの点でコストがかかる可能性があります。

これを回避するために、リストを使用して、Python を使用して DNA 鎖の逆補数を取得できます。

次の手順を使用して、for ループ、リスト、および join() メソッドを使用して DNA 鎖を逆相補します。

  • まず、complement_chars という名前の空のリストを作成して、DNA 鎖の逆補数の文字を格納します。
  • 次に、len() 関数を使用して入力 DNA 鎖の長さを見つけます。
  • その後、for ループを逆の順序で使用して、入力された DNA 鎖の文字を繰り返し処理します。
  • 反復では、文字 A に遭遇した場合、append() メソッドを使用して complement_chars に T を追加します。append() メソッドは、complement_chars で呼び出されると、入力引数として文字を受け取り、それを complement_chars に追加します。
  • 同様に、シーケンスで A、C、および G に遭遇した場合、complement_chars に T、G、および C を追加します。
  • 入力 DNA 鎖に他の文字が見つかった場合は、同じ文字を complement_chars に追加します。
  • for ループを実行した後、complement_chars に入力 DNA 鎖の逆補数の文字のリストを取得します。
  • この後、join() メソッドを使用して、元の DNA 鎖の逆相補体を取得します。join() メソッドは、input_string で呼び出されると、入力引数として反復可能なオブジェクトを取ります。実行後、反復可能オブジェクトの要素を文字として含む新しい文字列を、input_string で区切って返します。
  • join() メソッドを使用して DNA 鎖の逆補数を取得するには、入力引数として complement_chars を使用して空の文字列で join() メソッドを呼び出します。join() メソッドを実行した後、入力 DNA 鎖の逆補数を取得します。

これは、次の例で確認できます。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
complement_chars = []
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    if character == "A":
        complement_chars.append("T")
    elif character == "T":
        complement_chars.append("A")
    elif character == "G":
        complement_chars.append("C")
    elif character == "C":
        complement_chars.append("G")
    else:
        complement_chars.append(character)
reversed_strand = "".join(complement_chars)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

出力:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

Python で get() メソッドを使用して DNA ストランドの逆補数を取得する

for ループで if-else ブロックを使用する代わりに、辞書と get() メソッドを使用して、Python を使用して DNA 鎖の逆補数を取得できます。このタスクでは、次の辞書を作成します。

reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}

get() メソッドは、ディクショナリ内のキーに関連付けられた値を取得します。ディクショナリで呼び出されると、get() メソッドは最初の入力引数としてキーを取り、2 番目の入力引数としてオプションの値を取ります。

キーがディクショナリに存在する場合、それに関連付けられた値を返します。それ以外の場合、get() メソッドは 2 番目の引数として渡されたオプションの値を返します。

次の手順を使用して、get() メソッドと reverse_dict を使用して DNA 鎖の補体を反転させます。

  • まず、出力文字列を格納するために、reversed_strand という名前の空の文字列を定義します。
  • 次に、len() 関数を使用して入力 DNA 鎖の長さを見つけます。
  • その後、for ループを使用して、入力された DNA 鎖の文字を逆の順序で繰り返します。
  • 反復中に、現在の文字を最初と 2 番目の引数として、reverse_dictget() メソッドを呼び出します。現在の文字が reverse_dict に存在する場合、get() メソッドは DNA 鎖補体を返します。それ以外の場合、get() メソッドは現在の文字を返します。
  • get() メソッドの出力を reversed_strand に追加します。
  • for ループを実行した後、変数 reversed_strand で逆 DNA 鎖を取得します。

これは、次の例で確認できます。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    reversed_strand = reversed_strand + reverse_dict.get(character, character)

print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

出力:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

前に説明したように、for ループで文字列を作成するアプローチにはコストがかかります。したがって、次の例に示すように、リストと join() メソッドを get() メソッドとともに使用して、Python を使用して DNA 鎖の逆補数を取得できます。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}
complement_chars = []
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    complement_chars.append(reverse_dict.get(character, character))
reversed_strand = "".join(complement_chars)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

出力:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

ここでは、最初に、入力 DNA 鎖を反復しながら、逆補数の文字のリストを作成しました。その後、join() メソッドを使用して文字を結合することにより、逆補完を作成しました。

Python でリスト内包表記を使用して DNA 鎖の逆補完を取得する

for ループを使用する代わりに、リスト内包表記を使用して、Python を使用して DNA 鎖を逆補完することもできます。

まず、リスト内包表記を使用して DNA 鎖を補完するために、インデックスを使用して入力 DNA 鎖を反転します。その後、最後の例で作成した get() メソッドと reverse_dict でリスト内包表記を使用して、逆補数の文字のリストを取得します。

文字のリストを取得したら、次の例に示すように、join() メソッドを使用して、入力 DNA 鎖の逆補数を見つけます。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}
temp = input_strand[::-1]
complement_chars = [reverse_dict.get(character) for character in temp]
reversed_strand = "".join(complement_chars)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

出力:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

Python で translate() メソッドを使用して DNA ストランドの逆補数を取得する

translate() メソッドを使用して、DNA 鎖の逆相補体を見つけることもできます。このために、次の手順を使用します。

  • まず、文字列のインデックスを使用して、入力 DNA 鎖を反転します。その後、maketrans() 関数を使用して変換テーブルを作成します。
  • maketrans() 関数は入力引数として 2つの文字列を取り、両方の文字列の長さは同じである必要があります。実行後、最初の文字列の各文字が 2 番目の文字列の同じ位置にある文字にマップされている変換テーブルを返します。
  • 入力 DNA ストランドで maketrans() メソッドを呼び出している間、最初の入力引数として"ATGC"を渡し、2 番目の入力引数として"TACG"を渡します。このようにして、入力 DNA 鎖の各文字がその補集合にマッピングされます。
  • 翻訳テーブルを作成した後、translate() メソッドを使用して、DNA 鎖の逆相補体を取得します。
  • translate() メソッドは、文字列で呼び出されると、入力引数として変換テーブルを取ります。実行後、変換テーブルに従って呼び出された文字列の文字を置き換えることにより、新しい文字列を返します。文字のマッピングが変換テーブルに見つからない場合は、同じ文字が出力文字列にコピーされます。
  • 入力引数として変換テーブルを使用して、反転した DNA 鎖に対して translate() メソッドを呼び出します。
  • translate() メソッドを実行した後、入力 DNA 鎖の逆補数を取得します。

これは、次の例で確認できます。

input_strand = "ACGTAATTGGCC"
translation_table = input_strand.maketrans("ATCG", "TAGC")
temp = input_strand[::-1]
reversed_strand = temp.translate(translation_table)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

出力:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

Python の Biopython モジュールを使用して DNA 鎖の逆相補体を取得する

Python の Biopython モジュールを使用して、DNA 鎖を逆相補することもできます。次のステートメントを使用すると、PythonPIP3 のパッケージインストーラーを使用して Biopython モジュールをインストールできます。

pip3 install Bio

Biopython モジュールは、Python を使用して DNA 鎖を逆相補するための reverse_complement() メソッドを提供します。DNA シーケンスオブジェクトで呼び出されると、reverse_complement() メソッドは DNA シーケンスの逆補数を返します。

次の手順を使用して、Python の reverse_complement() メソッドを使用して DNA 鎖の逆補数を取得します。

  • まず、Seq() 関数を使用して、DNA 鎖から DNA シーケンスを作成します。Seq() 関数は、入力として DNA 鎖を表す文字列を受け取り、DNA シーケンスを返します。
  • DNA シーケンスオブジェクトを取得した後、次の例に示すように、シーケンスに対して reverse_complement() メソッドを呼び出して、DNA 鎖の逆補数を取得します。
from Bio.Seq import Seq

input_strand = "ACGTAATTGGCC"
sequence = Seq(input_strand)
reversed_strand = sequence.reverse_complement()
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

出力:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

まとめ

この記事では、Python を使用して DNA 鎖を逆相補するためのさまざまなアプローチについて説明しました。これらすべてのメソッドの中から、外部ライブラリの使用が許可されていない場合は、translate() メソッドを使用してアプローチを選択できます。それ以外の場合は、Biopython モジュールを使用して、Python の DNA 鎖を逆補完することができます。

この記事を楽しんでいただけたでしょうか。より有益な記事をお楽しみに。

著者: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

関連記事 - Python String