有没有一种方法可以在Python 3中从多个明确的rna序列中编写一个歧义的rna序列?

时间:2018-12-24 14:23:35

标签: python sequence biopython ambiguous rna-seq

我有许多相同长度的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']

1 个答案:

答案 0 :(得分:0)

首先,您要查看哪些核苷酸显示歧义性。您所有test序列的第一个核苷酸是G,因此那里没有歧义。但是您所有测试序列的第三个核苷酸可以是ACU

我们可以通过map(set, zip(*test))(使用unpacking operator *)以编程方式查看此内容:

>>> 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'}]

好的,因此对于第三个核苷酸,我们可以拥有ACU,我们想用H代替它。但是在您的字典中,H是键,['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'