我有许多相同长度的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']
答案 0 :(得分:0)
首先,您要查看哪些核苷酸显示歧义性。您所有test
序列的第一个核苷酸是G
,因此那里没有歧义。但是您所有测试序列的第三个核苷酸可以是A
,C
或U
。
我们可以通过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'}]
好的,因此对于第三个核苷酸,我们可以拥有A
,C
或U
,我们想用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'