我有一个包含单字母 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
让我知道这是否适合你
关于python - 将单个字母代码连同链编号一起转换为 3 个字母代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72598009/