【问题标题】:Generate the all possible unique peptides (permutants) in Python/Biopython在 Python/Biopython 中生成所有可能的独特肽(置换)
【发布时间】:2022-01-07 16:46:58
【问题描述】:

我有一个场景,其中我有一个具有 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、五)。

我是编码新手,所以有人可以帮助我如何在 Python 或 Biopython 中为此编码。

输出应该是一个独特序列的列表,如下所示:

CKASGFTFT, CTTSGFTFS, CTASGKTFS, CTASAFTWS、CTRSGFTFS、CKASEFTFS ....等等以此类推,在不更改现有框架的情况下从 AA 池中获得 1、2 或 3 个替换。

【问题讨论】:

  • 你能举一个输入和输出的例子吗
  • @anarchy 请找到更新后的问题
  • 这在计算上会很昂贵,而且你需要所有可能的排列?
  • 是的!如果不能得到至少最大可能突变体的数量,即算术值,我需要所有可能的序列。

标签: python data-science computer-science bioinformatics biopython


【解决方案1】:

好的,所以在我的代码完成后,我倒推计算,

案例 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 或case2 中的2 或case 3 中的3。

此代码打印它们并将它们存储到列表变量中,因此它可以是存储或内存密集型和 CPU 密集型。

如果你想通过用数字替换字母来存储字符串,你可以减少内存占用,因为它们可能占用更少的空间,你甚至可以考虑使用 pandas 之类的东西或附加到存储中的 csv 文件。

如果你愿意,你可以遍历存储变量来遍历字符串,像这样。

for i in storage:
    print(i)

或者您可以将其转换为 pandas 系列、数据帧或直接逐行写入存储中的 csv 文件。

【讨论】:

  • 非常感谢您的帮助... 1. 输出类似于 ['A', 'K', 'A', 'S', 'G', 'F' , 'T', 'F', 'S'] 但为了进一步计算,我需要 AKASGFTFS, AKASGFCCS, ..... 格式。有可能得到喜欢吗?也请告诉如何存储它。
  • @shivamGupta 已经在代码中了,请看一下,''.join(temp) 合并了你可以看到的字符串,我已经为你添加了,请正确查看代码
  • @shivamGupta 我更新了代码,以便将字符串保存到 storage 变量中。您可以对存储变量执行 for 循环以访问字符串。
  • 如果你想要@shivamGupta,你可以试一试,如果你自己弄清楚并进行实验,你会学得更快
  • @shivamGupta 运行时间会更长,因为您将在每次迭代中检查列表,您可以在使用 pandas 之类的库后检查重复项
【解决方案2】:

让我们计算您要查找的突变总数。

假设您要替换单个 AA。首先,您的框架中有 9 个 AA,每个 AA 都可以更改为其他 19 个 AA 之一。那是 9 * 19 = 171

如果你想改变两个 AA,你的帧中有 9c2 = 36 个 AA 组合,以及池中两个 19^2 的排列。这给了我们 36 * 19^2 = 12996

最后,如果要改变三个,池中的三个有 9c3 = 84 种组合和 19^3 排列。这给了我们 84 * 19^3 = 576156

把它们放在一起,你会得到 171 + 12996 + 576156 = 589323 个可能的突变。希望这有助于说明您要完成的任务的规模!

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多