随链编号将单字母代码转换为3字母代码



我有一个字符串有单字母AA代码('GPHMAQGTLI')。我想转换成各自的3个字母代码,并以相同的顺序在范围(300-309)内给出编号。

我写了以下内容,但由于'return'函数,它只转换字符串的第一个字母

d = {'CYS': 'C', 'ASP': 'D', 'SER': 'S', 'GLN': 'Q', 'LYS': 'K',
'ILE': 'I', 'PRO': 'P', 'THR': 'T', 'PHE': 'F', 'ASN': 'N', 
'GLY': 'G', 'HIS': 'H', 'LEU': 'L', 'ARG': 'R', 'TRP': 'W', 
'ALA': 'A', 'VAL':'V', 'GLU': 'E', 'TYR': 'Y', 'MET': 'M'}
def triple_aa(val, num):
for key, value in d.items():
if val == value:
print(key, num)


def single_aa(x):
for i in x:
#print(i)
return i


def chain_no(a,b):
for i in range(a,b+1,1):
#print(i)
return i



A= single_aa('GPHMA')
B= chain_no(250,254)
triple_aa(A,B) 

预期输出如下,但我只得到'GLY250'

print((triple_aa(A,B)) 
GLY250
PRO251
HIS252
MET253

您可以这样做。首先翻转键,值的字典搜索更容易,然后循环通过您的字母AA代码。

编辑

作为带有输入参数的函数:

def triple_aa(seq, dic, rng_start):   
d_flip = {v:k for k,v in dic.items()}
res = []
for idx, char in enumerate(seq, rng_start):
tmp = f"{d_flip.get(char, 'XXX')}{idx}"
#print(tmp)
res.append(tmp)
return res
res = triple_aa('GPHMAQGTLI', d, 300)
print(res)

没有功能:

d = {'CYS': 'C', 'ASP': 'D', 'SER': 'S', 'GLN': 'Q', 'LYS': 'K',
'ILE': 'I', 'PRO': 'P', 'THR': 'T', 'PHE': 'F', 'ASN': 'N', 
'GLY': 'G', 'HIS': 'H', 'LEU': 'L', 'ARG': 'R', 'TRP': 'W', 
'ALA': 'A', 'VAL':'V', 'GLU': 'E', 'TYR': 'Y', 'MET': 'M'}
d_flip = {v:k for k,v in d.items()}
s = 'GPHMAQGTLI'
#res = [] # res if you want to access the combinations later
for idx, char in enumerate(s, 300):
tmp = f"{d_flip.get(char, 'XXX')}{idx}" #if key can't be found 'XXX' as default value
print(tmp)
#res.append(tmp)

#print(res)
GLY300
PRO301
HIS302
MET303
ALA304
GLN305
GLY306
THR307
LEU308
ILE309

让我知道这是否适合你

这也可以通过使用zip函数和'for循环'来实现。

d= {'CYS': 'C', 'ASP': 'D', 'SER': 'S', 'GLN': 'Q', 'LYS': 'K',
'ILE': 'I', 'PRO': 'P', 'THR': 'T', 'PHE': 'F', 'ASN': 'N',
'GLY': 'G', 'HIS': 'H', 'LEU': 'L', 'ARG': 'R', 'TRP': 'W',
'ALA': 'A', 'VAL':'V', 'GLU': 'E', 'TYR': 'Y', 'MET': 'M'}

def triple_aa(val, num):
for key, value in d.items():
if val == value:
print(key, num, sep='')


A= 'GPHMA'
B= range(250,254)
for A,B in zip(A,B):
triple_aa(A,B)

输出将是:

GLY250
PRO251
HIS252
MET253

最新更新