在Python/Biopython中生成所有可能的唯一肽(置换)
问题描述
我有一个场景,其中我有一个具有9个氨基酸的肽框。我想通过替换此框架上最多3个氨基酸(即仅替换1个、2个或3个AA)来生成所有可能的肽。
框架为CKASGFTFS,我希望通过从20个AA池中最多替换3个AA来查看所有突变。
我们有20个不同AA(A、R、N、D、E、G、C、Q、H、I、L、K、M、F、P、S、T、W、Y、V)的池。
我刚开始编码,所以有人能帮我解决如何用Python或Biopython为此进行编码的问题吗?
输出应该是如下所示的唯一序列列表:
CKASGFTFT、CTTSGFTFS、CTASGKTF、CTASAFTWS,CTRSGFTFS、CKASEFTFS.依此类推,在不更改现有框架的情况下从AA池中获得1、2或3个替换项。
解决方案
好的,所以在我的代码完成后,我倒着计算,
案例1,为9C1 x 19=171
案例2,为9c2 x 19 x 19=12,996
案例3,为9C3 x 19=576,156
总共有589,323个组合。
这是所有3个案例的代码,您可以按顺序运行它们。
您还请求将数组联接到单个字符串中,我已更新代码以反映这一点。
import copy
original = ['C','K','A','S','G','F','T','F','S']
possibilities = ['A','R','N','D','E','G','C','Q','H','I','L','K','M','F','P','S','T','W','Y','V']
storage=[]
counter=1
# case 1
for i in range(len(original)):
for x in range(20):
temp = copy.deepcopy(original)
if temp[i] == possibilities[x]:
pass
else:
temp[i] = possibilities[x]
storage.append(''.join(temp))
print(counter,''.join(temp))
counter += 1
# case 2
for i in range(len(original)):
for j in range(i+1,len(original)):
for x in range(len(possibilities)):
for y in range(len(possibilities)):
temp = copy.deepcopy(original)
if temp[i] == possibilities[x] or temp[j] == possibilities[y]:
pass
else:
temp[i] = possibilities[x]
temp[j] = possibilities[y]
storage.append(''.join(temp))
print(counter,''.join(temp))
counter += 1
# case 3
for i in range(len(original)):
for j in range(i+1,len(original)):
for k in range(j+1,len(original)):
for x in range(len(possibilities)):
for y in range(len(possibilities)):
for z in range(len(possibilities)):
temp = copy.deepcopy(original)
if temp[i] == possibilities[x] or temp[j] == possibilities[y] or temp[k] == possibilities[z]:
pass
else:
temp[i] = possibilities[x]
temp[j] = possibilities[y]
temp[k] = possibilities[z]
storage.append(''.join(temp))
print(counter,''.join(temp))
counter += 1
输出如下所示(只有开头和结尾)。
结果还将保存到名为storage
的变量,该变量是本机python列表。
1 AKASGFTFS
2 RKASGFTFS
3 NKASGFTFS
4 DKASGFTFS
5 EKASGFTFS
6 GKASGFTFS
...
...
...
589318 CKASGFVVF
589319 CKASGFVVP
589320 CKASGFVVT
589321 CKASGFVVW
589322 CKASGFVVY
589323 CKASGFVVV
根据您的计算机,运行大约需要10-20分钟。
它将显示所有组合,如果有任何一个与案例1中的原始AA或案例2中的2或案例3中的3相同,则跳过更改AA。
此代码将打印它们并将其存储到列表变量,因此它可能是存储或内存密集型且CPU密集型。
如果要通过用数字替换字母来存储字符串,可以减少内存占用,因为它们可能占用较少的空间。您甚至可以考虑使用 pandas 之类的内容或将其追加到存储中的CSV文件中。
如果愿意,您可以迭代存储变量以遍历字符串,如下所示。
for i in storage:
print(i)
或者您可以将其转换为 pandas 系列、数据帧或直接逐行写入存储中的CSV文件。
相关文章