iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
AI & Data

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

Day08 | Rosalind 生資解題 - 001. DNA(Counting DNA Nucleotides)

  • 分享至 

  • xImage
  •  

Day08 | Rosalind 生資解題 - 001. DNA(Counting DNA Nucleotides)

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

https://ithelp.ithome.com.tw/upload/images/20250919/20125192eWw1uX8oMS.png

給一段ATCG序列,分別計算出A、C、G、T各別出現幾次

去氧核糖核酸(DNA) 有四種不同的鹼基(Bases),分別是:

  • A 腺嘌呤 Adenine
  • T 胸腺嘧啶 Thymine
  • G 鳥嘌呤 Guanine
  • C 胞嘧啶 Cytosine

https://ithelp.ithome.com.tw/upload/images/20250919/201251924rrICmPAQD.png

所以從頭到尾數一遍,使用一個dict()來紀錄出現次數。
最後,因為題目要求的順序依次是A C G T按照字母排序

輸入:

AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC

輸出:

20 12 17 21

寫法一

這是我個人第一次寫生物相關題目
所以一開始,習慣採國高中熟悉的ATCG順序來命名(在生物課本裡常見「AT、GC 配對」),
但題目要求以ACGT,所以在印出之前使用sorted()來排序字母

s = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"

counts = {'A': 0, 'T': 0, 'C': 0, 'G': 0}
for i in range(len(s)):
    match s[i]:
        case 'A':
            counts['A'] += 1
        case 'T':
            counts['T'] += 1
        case 'C':
            counts['C'] += 1
        case 'G':
            counts['G'] += 1

for key in sorted(counts):
    print(counts[key], end=' ')  # 沒去掉最後一個空白字符

# print(" ".join(str(counts[key]) for key in sorted(counts))) # 去掉最後一個空白字符

寫法二

後來發現主流風格是按字母ACGT順序
FASTA格式、GenBank等生物資訊數據庫通常都按照 ACGT 排序
符合字母由小到大排序,按照字典序(lexicographic order)排列

s = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"

counts = {'A': 0, 'C': 0, 'G': 0, 'T': 0}

for i in range(len(s)):
    match s[i]:
        case 'A':
            counts['A'] += 1
        case 'C':
            counts['C'] += 1
        case 'G':
            counts['G'] += 1
        case 'T':
            counts['T'] += 1

print(" ".join(str(counts[key]) for key in counts)) # 去掉最後一個空白字符
# print(counts['A'], counts['C'], counts['G'], counts['T'])

上一篇
Day07 | Rosalind 生資解題 - IN6. Dictionaries +defaultdict
系列文
Rosalind 生物資訊解題系統8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言