在 Python/Biopython 中生成所有可能的独特肽(排列)
Generate the all possible unique peptides (permutants) in Python/Biopython
我有一个场景,其中我有一个具有 9 个 AA 的肽框架。我想通过在此框架上最多替换 3 个 AA 来生成所有可能的肽,即仅替换 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, CTASG KTFS, CTASAFTWS, CTRSGFTFS、CKASEFTFS ....依此类推从 AA 池中获得 1、2 或 3 个替换而不更改现有框架。
好的,所以在我的代码完成后,我向后计算,
案例 1,是 9c1 x 19 = 171
案例 2,是 9c2 x 19 x 19 = 12,996
案例 3,是 9c3 x 19 x 19 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 分钟,具体取决于您的计算机。
它会显示所有的组合,如果任何一个与原来的相同,则跳过更改 AAs 在 case1 或 2 在 case2 或 3 在 case 3.
此代码既打印它们又将它们存储到列表变量中,因此它可以是存储或内存密集型并且 CPU 密集型。
如果你想通过用数字替换字母来存储字符串,你可以减少内存占用,因为它们可能占用更少 space,你甚至可以考虑使用 pandas 之类的东西或附加到存储中的 csv 文件。
如果您愿意,可以迭代存储变量来遍历字符串,就像这样。
for i in storage:
print(i)
或者您可以将其转换为pandas系列、数据帧或直接逐行写入存储中的csv文件。
让我们计算一下您要查找的突变总数。
假设您要更换单个 AA。首先,您的框架中有 9 个 AA,每个 AA 都可以更改为其他 19 个 AA 中的一个。那是 9 * 19 = 171
如果你想换两个AA,你的frame中有9c2 = 36种AA组合,pool中的两个有19^2个排列。这给了我们 36 * 19^2 = 12996
最后,如果要换三,池中的三有9c3 = 84种组合和19^3种排列。这给了我们 84 * 19^3 = 576156
把它们放在一起,你得到 171 + 12996 + 576156 = 589323 个可能的突变。希望这有助于说明您要完成的任务的规模!
我有一个场景,其中我有一个具有 9 个 AA 的肽框架。我想通过在此框架上最多替换 3 个 AA 来生成所有可能的肽,即仅替换 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, CTASG KTFS, CTASAFTWS, CTRSGFTFS、CKASEFTFS ....依此类推从 AA 池中获得 1、2 或 3 个替换而不更改现有框架。
好的,所以在我的代码完成后,我向后计算,
案例 1,是 9c1 x 19 = 171
案例 2,是 9c2 x 19 x 19 = 12,996
案例 3,是 9c3 x 19 x 19 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 分钟,具体取决于您的计算机。
它会显示所有的组合,如果任何一个与原来的相同,则跳过更改 AAs 在 case1 或 2 在 case2 或 3 在 case 3.
此代码既打印它们又将它们存储到列表变量中,因此它可以是存储或内存密集型并且 CPU 密集型。
如果你想通过用数字替换字母来存储字符串,你可以减少内存占用,因为它们可能占用更少 space,你甚至可以考虑使用 pandas 之类的东西或附加到存储中的 csv 文件。
如果您愿意,可以迭代存储变量来遍历字符串,就像这样。
for i in storage:
print(i)
或者您可以将其转换为pandas系列、数据帧或直接逐行写入存储中的csv文件。
让我们计算一下您要查找的突变总数。
假设您要更换单个 AA。首先,您的框架中有 9 个 AA,每个 AA 都可以更改为其他 19 个 AA 中的一个。那是 9 * 19 = 171
如果你想换两个AA,你的frame中有9c2 = 36种AA组合,pool中的两个有19^2个排列。这给了我们 36 * 19^2 = 12996
最后,如果要换三,池中的三有9c3 = 84种组合和19^3种排列。这给了我们 84 * 19^3 = 576156
把它们放在一起,你得到 171 + 12996 + 576156 = 589323 个可能的突变。希望这有助于说明您要完成的任务的规模!