【发布时间】:2016-11-30 11:16:25
【问题描述】:
你好,我对 python 很陌生。我有以下问题: 我想编写一个脚本,给定具有歧义的(dna)序列,写入所有可能的序列,(如果少于 100 个,如果有超过 100 个可能的序列,则会打印适当的错误消息) 对于 DNA 核苷酸歧义:http://www.bioinformatics.org/sms/iupac.html
例如:对于序列“AYGH”,脚本的输出将是“ACGA”, “ACGC”, “ACGT”, “ATGA”, “ATGC” 和“ATGT”。 A、C、G 和 T 是默认核苷酸。所有其他人都可以有不同的价值(见链接)。
所以我写了这个:
def possible_sequences (seq):
poss_seq = ''
for i in seq:
if i=='A'or i=='C'or i=='G'or i=='T':
poss_seq += i
else:
if i== 'R':
poss_seq += 'A' # OR 'G', how should i implement this?
elif i == 'Y':
poss_seq += 'C' # OR T
elif i == 'S':
poss_seq += 'G' # OR C
elif i == 'W':
poss_seq += 'A' # OR T
elif i == 'K':
poss_seq += 'G' # OR T
elif i == 'M':
poss_seq += 'A' # OR C
elif i == 'B':
poss_seq += 'C' # OR G OR T
elif i == 'D':
poss_seq += 'A' # OR G OR T
elif i == 'H':
poss_seq += 'A' # OR C OR T
elif i == 'V':
poss_seq += 'A' # OR C OR G
elif i == 'N':
poss_seq += 'A' # OR C OR G OR T
elif i == '-' or i == '.':
poss_seq += ' '
return poss_seq
当我测试我的功能时: 可能的序列('ATRY-C') 我得到了:
'ATAC C'
但我应该得到:
'ATAC C'
'ATAT C'
'ATGC C'
'ATGT C'
有人可以帮帮我吗?我知道当存在歧义时我必须重述并写第二个 poss_seq 但我不知道如何......
【问题讨论】:
-
你只是循环一次。您需要循环遍历序列,然后每当遇到要更改的字母(即不是 A、C、G 或 T)时,循环遍历可能的替换。您必须嵌套这些循环才能获得所有排列。
-
只是小费;你可以做
if i in 'RWMDHVN': poss_seq += 'A'而不是写多个 if-elif 语句 -
是的,这就是我想在最后一句话中说的。明白但不知道怎么实现?