如何从表示环肽的字符串生成子肽(特殊组合)?

这是我的问题:我有一个代表环肽的序列,我正在尝试创建一个生成所有可能的亚肽的函数.当2个氨基酸之间的键断裂时,产生亚肽.例如:对于肽’ABCD’,其子肽将是’A’,’B’,’C’,’D’,’AB’,’BC’,’CD’,’DA’,’ABC’, ‘BCD’,’CDA’,DAB’.因此,来自长度为n的肽的可能的亚肽的量将总是n *(n-1).请注意,并非所有这些都是来自肽的子串(‘DA’,’CDA’……).

我编写了一个生成组合的代码.但是,有一些过量的元素,例如没有连接的氨基酸(‘AC’,’BD’……).有没有人有一个暗示我怎么能消除这些,因为每次调用该函数时肽可能有不同的长度?这是我到目前为止所拥有的:

def Subpeptides(peptide): 
    subpeptides = []
    from itertools import combinations
    for n in range(1, len(peptide)):
        subpeptides.extend(
    [''.join(comb) for comb in combinations(peptide, n)]
    )
    return subpeptides

以下是肽’ABCD’的结果:

['A', 'B', 'C', 'D', 'AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'ABC', 'ABD', 'ACD', 'BCD']

如果它们代表肽的真实序列,则氨基酸的顺序并不重要.例如,’ABD’是’DAB’的有效形式,因为D和A在环肽中具有键.

我正在使用Python.

最佳答案
它可能更容易生成它们:

def subpeptides(peptide):
    l = len(peptide)
    looped = peptide + peptide
    for start in range(0, l):
        for length in range(1, l):
            print(looped[start:start+length])

这使:

>>> subpeptides("ABCD")
A
AB
ABC
B
BC
BCD
C
CD
CDA
D
DA
DAB

(如果你想要一个列表而不是打印,只需更改print(…)以产生……并且你有一个生成器).

所有上述内容都列举了第一个债券可能被破坏的不同位置,然后是在一个,两个或三个(在这种情况下)酸之后下一个债券破裂时会得到的不同产品.循环只是一种避免具有“循环”逻辑的简单方法.

转载注明原文:如何从表示环肽的字符串生成子肽(特殊组合)? - 代码日志