【问题标题】:How to generate subpeptides (special combinations) from a string representing a cyclic peptide?如何从表示环肽的字符串中生成亚肽(特殊组合)?
【发布时间】:2013-11-12 04:29:18
【问题描述】:

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

【问题讨论】:

  • 'DAB' 和 'ABD' 不会被认为是同一个肽吗?
  • 它们被认为是相同的,因为断裂的键仍然是 C-D 和 C-B。顺序是不一样的,但因为我和他们的群众一起工作,所以这并不重要。不过观察力不错。

标签: python string substring combinations itertools


【解决方案1】:

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

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 只是一种避免“循环”逻辑的简单方法。

【讨论】:

  • looped 变量加 1。
  • 非常感谢!如此简单、优雅的解决方案!
  • @ViníciusRodovalho 没问题。如果您点击投票按钮旁边的“打勾”(我的答案的左上角),这将被标记为正确并且您的问题已关闭(这将给我积分并鼓励人们将来回答您的问题)。
【解决方案2】:

错过了最后一个学期 你可以使用下面的代码

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

【讨论】:

    【解决方案3】:

    你可以用这个

    >>>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']

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

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多