iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
AI & Data

Rosalind 生物資訊解題系統系列 第 10

Day10 | Rosalind 生資解題 - 003. REVC (Complementing a Strand of DNA)

  • 分享至 

  • xImage
  •  

Day10 | Rosalind 生資解題 - 003. REVC (Complementing a Strand of DNA)

題目連結:https://rosalind.info/problems/revc/

https://ithelp.ithome.com.tw/upload/images/20250921/20125192C863BeiQah.png

DNA 的每一條鏈都有一個方向:5' → 3'(由糖-磷酸骨架的 5' 碳到 3' 碳)
在雙股 DNA 中,兩條鏈是反向平行 (antiparallel) 的:
一條是 5' → 3'
一條是 3' → 5'
但是我們閱讀的方向,都是從5' → 3'

https://ithelp.ithome.com.tw/upload/images/20250921/20125192fLsP98zgH5.png

這一題要計算DNA字串的反向互補(reverse complement)

輸入

AAAACCCGGT

輸出

ACCGGGTTTT

https://ithelp.ithome.com.tw/upload/images/20250921/20125192XpgcWRqHZi.png

此題有兩個核心要點
1:反向。序列方向相反(首尾顛倒)
2:互補。DNA是雙股螺旋,四種鹼基互補規則為:A配T、C配G

所以給一段序列 AAAACCCGGT
需要輸出 ACCGGGTTTT

為什麼要前後顛倒?

直觀說明
兩端3'->5'5'->3'互補,就有點像我們的書本:

中文字都是由左向右排列,人類閱讀是從左邊讀到右邊

https://ithelp.ithome.com.tw/upload/images/20250921/20125192K8hiS1KCXt.png

但是書本闔上、閉起來的時候,兩者就頭尾重疊了:
左邊的頭對到右邊尾、右邊頭對到左邊尾

https://ithelp.ithome.com.tw/upload/images/20250921/201251928cgFAgDfJ7.png

不會都從閉闔的書本同一側讀進去、或者讀出來

https://ithelp.ithome.com.tw/upload/images/20250921/20125192fMhEnxcQCR.png

(除非你的眼睛特別牛B)

https://ithelp.ithome.com.tw/upload/images/20250921/20125192cLcDTl2u52.png

所以我們朗讀的時候,都是從頭部(5')讀到尾部(3')
照固定的順序來

解法一

程式碼:

s = "AAAACCCGGT"

rev_s = s[::-1]
# 或者
# rev_s = ''.join(reversed(s))

for base in rev_s:
    match base:
        case 'A':
            print('T', end='')
        case 'C':
            print('G', end='')
        case 'G':
            print('C', end='')
        case 'T':
            print('A', end='')

解法二

或者用dict存table配對

def reverse_complement(dna):
    table = {'A': 'T', 'T': 'A', 'C': 'G', 'G': 'C'}
    result = str()

    for base in reversed(dna):
        result += table[base]
    return result

s = "AAAACCCGGT"

print(reverse_complement(s))

解法三

或者沿用前一篇maketrans()

def reverse_complement(s):
    # 先互補(替換),再反轉
    trans_table = str.maketrans('ATCG', 'TAGC')
    rev_s = s.translate(trans_table)
    return rev_s[::-1]

s = "AAAACCCGGT"

print(reverse_complement(s))

上一篇
Day09 | Rosalind 生資解題 - 002. RNA(Transcribing DNA into RNA )+字串轉換
下一篇
Day11 | Rosalind 生資解題 - 004. FIB(Rabbits and Recurrence Relations)+斐波那契數列遞迴
系列文
Rosalind 生物資訊解題系統12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言