3

这是我的问题:我有一个代表肽的序列,我正在尝试创建一个生成所有可能的亚肽的函数。当 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。

4

3 回答 3

6

将它们全部生成可能更容易:

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(...)yield ...并且您有一个生成器)。

以上所做的就是列举第一个键可能断裂的不同位置,然后如果下一个键在一个、两个或三个(在这种情况下)酸后断裂,你会得到不同的产品。 looped只是一种避免“循环”逻辑的简单方法。

于 2013-11-01T00:36:23.133 回答
0

错过了最后一个学期,您可以使用以下代码

def subpeptides(peptide):
    l = len(peptide)
    ls=[]
    looped = peptide + peptide
    for start in range(0, l):
        for length in range(1, l):
            ls.append( (looped[start:start+length]))
    ls.append(peptide)
    return ls
于 2013-11-27T20:23:13.977 回答
0

你可以用这个

>>>aa='ABCD'
>>> F=[]
>>> B=[]
>>> for j in range(1,len(aa)+1,1):
for i in range(0,len(aa),1):
    A=str.split(((aa*j)[i:i+j]))
    B=B+A
    C=(B[0:len(aa)*len(aa)-len(aa)+1])

它给你:

C = ['A','B','C','D','AB','BC','CD','DA','ABC','BCD','CDA','DAB' , 'A B C D']

我希望这会有所帮助,顺便说一句,我也在做coursera课程,如果有兴趣加入部队,请告诉我

于 2013-12-05T17:41:17.770 回答