这是我的问题:我有一个代表环肽的序列,我正在尝试创建一个生成所有可能的亚肽的函数.当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(…)以产生……并且你有一个生成器).
所有上述内容都列举了第一个债券可能被破坏的不同位置,然后是在一个,两个或三个(在这种情况下)酸之后下一个债券破裂时会得到的不同产品.循环只是一种避免具有“循环”逻辑的简单方法.