这是我的问题:我有一个代表环状肽的序列,我试图创建一个函数来生成所有可能的子肽。当两个氨基酸之间的键被破坏时,就会产生一个亚肽。例如,肽'ABCD‘的亚肽为'A’、'B‘、'C’、'D‘、'AB’、'BC‘、'CD’、'DA‘、'ABC’、'BCD‘、'CDA’、民建联。因此,从长度为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']如果氨基酸代表肽的真正序列,那么氨基酸的顺序就不重要了。例如,由于D和A在环肽中有一个键,所以'ABD‘是一种有效的’民建联‘形式。
我在用Python。
发布于 2013-11-01 00:36:23
简单地生成它们可能更容易:
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-27 20:23:13
错过了最后一个学期,您可以使用下面的代码
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-12-05 17:41:17
你可以用这个
>>>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',‘民建联’,'ABCD‘
我希望这对我有帮助,顺便说一句,如果有兴趣的话,让我知道,我也在修课程。
https://stackoverflow.com/questions/19718853
复制相似问题