这是我的问题:我有一个代表 cyclic 肽的序列,我正在尝试创建一个生成所有可能的子肽的函数。当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。
答案 0 :(得分: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
只是一种简单的方法,可以避免出现“围绕循环”的逻辑。
答案 1 :(得分: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
答案 2 :(得分: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','ABCD']
我希望这会有所帮助,顺便说一下,如果有兴趣加入力量的话,我也会做这个课程,让我知道