0

我有许多相同长度的 rna 序列。现在我想创建一个函数,它会给我一行模棱两可的 rna 作为输出。到目前为止,我没有找到任何关于在线编写模棱两可序列的有用信息。

我想过使用这样的字典:

d = {"N": ["A", "C", "G", "U"],
 "R": ["A", "G"],
 "Y": ["U", "C"],
 "K": ["G", "U"],
 "M": ["A", "C"],
 "B": ["C", "G", "U"],
 "D": ["A", "G", "U"],
 "H": ["A", "C", "U"],
 "V": ["A", "C", "G"]}

我不知道如何以正确的方式使用它,因为我是初学者。

 test = ['GUUUUUCAUUUA', 'GUUUUUCAUUUG', 'GUUUUUCAUCUU', 'GUUUUUCAUCUC', 
'GUUUUUCAUCUA', 'GUUUUUCAUCUG', 'GUUUUUCACUUA', 'GUUUUUCACUUG', 
'GUUUUUCACCUU', 'GUUUUUCACCUC', 'GUUUUUCACCUA', 'GUUUUUCACCUG', 
'GUUUUCCAUUUA', 'GUUUUCCAUUUG', 'GUUUUCCAUCUU', 'GUUUUCCAUCUC', 
'GUUUUCCAUCUA', 'GUUUUCCAUCUG', 'GUUUUCCACUUA', 'GUUUUCCACUUG', 
'GUUUUCCACCUU', 'GUUUUCCACCUC', 'GUUUUCCACCUA', 'GUUUUCCACCUG', 
'GUCUUUCAUUUA', 'GUCUUUCAUUUG', 'GUCUUUCAUCUU', 'GUCUUUCAUCUC', 
'GUCUUUCAUCUA', 'GUCUUUCAUCUG', 'GUCUUUCACUUA', 'GUCUUUCACUUG', 
'GUCUUUCACCUU', 'GUCUUUCACCUC', 'GUCUUUCACCUA', 'GUCUUUCACCUG', 
'GUCUUCCAUUUA', 'GUCUUCCAUUUG', 'GUCUUCCAUCUU', 'GUCUUCCAUCUC', 
'GUCUUCCAUCUA', 'GUCUUCCAUCUG', 'GUCUUCCACUUA', 'GUCUUCCACUUG', 
'GUCUUCCACCUU', 'GUCUUCCACCUC', 'GUCUUCCACCUA', 'GUCUUCCACCUG', 
'GUAUUUCAUUUA', 'GUAUUUCAUUUG']
4

1 回答 1

0

首先,您想查看哪些核苷酸显示不明确。所有test序列的第一个核苷酸是 a G,所以没有歧义。但是所有测试序列的第三个核苷酸可以是A,CU.

map(set, zip(*test))我们可以通过执行(使用解包操作符*)以编程方式看到这一点:

>>> list(map(set, zip(*test)))
[{'G'},
 {'U'},
 {'A', 'C', 'U'},
 {'U'},
 {'U'},
 {'C', 'U'},
 {'C'},
 {'A'},
 {'C', 'U'},
 {'C', 'U'},
 {'U'},
 {'A', 'C', 'G', 'U'}]

好的,所以对于第三个核苷酸,我们可以有或A,我们想用 替换它。但是在您的字典中,是键,是值。所以我们必须反转字典。因为我们不能使用列表作为键,所以我们把它们变成了字符串。我们还对它们进行排序,以便我们始终拥有相同的顺序。CUHH['A', 'C', 'U']

>>> d = {''.join(sorted(v)): k  for (k, v) in d.items()}
>>> d
{'ACGU': 'N',
 'AG': 'R',
 'CU': 'Y',
 'GU': 'K',
 'AC': 'M',
 'CGU': 'B',
 'AGU': 'D',
 'ACU': 'H',
 'ACG': 'V'}

现在我们可以编写你的函数:

>>> def give_ambiguous_rna(sequences):
        return ''.join([list(s)[0] if len(s) == 1 else d[''.join(sorted(s))] for s in map(set, zip(*sequences))])
>>> give_ambiguous_rna(test)
'GUHUUYCAYYUN'
于 2019-01-14T16:06:21.657 回答