生成循环谱

时间:2015-02-12 01:49:20

标签: python list bioinformatics cycle

我正试图从我的肽中生成所有环状组合的光谱。

这是我的线性光谱代码:

#For example: LEQN
#L:113 E:129 Q:128 N:114
    peptide = [113,129,128,114]
        for a in peptide:
            for i in peptide[b:]:
                s+= i
                spectrum.append(s)
            s=0
            b += 1

spectrum.sort()
print spectrum

输出: [113,114,128,129,242,242,257,370,371,484]

我的代码成功添加了这些和L(113),E(129),Q(128),N(114),LE(113 + 129),LEQ(113 + 129 + 128),LEQN(113 + 129) + 128 + 114),EQ(129 + 128),EQN(129 + 128 + 114),QN(128 + 114)

缺少QNL(128 + 113 + 114),NL(114 + 113),NLE(114 + 113 + 129)

实施例。 QNL应为128 + 114 + 113,这是元素2,3和1的总和。 NL是114 + 133,它是元素3和0的总和.NLE是113 + 114 + 129,它是元素3,0,1的总和。

*我不需要添加EQNL或QNLE,因为它们与LEQN完全相同。

*但LE = 242且QN = 242具有相同的质量,但不是一回事。

预期输出: 113,114,128,129,227(N + L),242,242,257,355(Q + N + L),356(N + L + E) ),370,371,484

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您需要所有可能的子列表,每个长度最多为peptide列表的长度,并且对于该列表中的每个起始位置,在列表的末尾包围。一种方法是使用itertools中的cycleislice

from itertools import cycle, islice

peptide = [113, 129, 128, 114]
spectrum = []
for num in range(1, len(peptide)):
    for start in range(len(peptide)):
        group = islice(cycle(peptide), start, start + num)
        spectrum.append(sum(group))
spectrum.append(sum(peptide)) # add the entire list only once

这样,sorted(spectrum)最终为[113, 114, 128, 129, 227, 242, 242, 257, 355, 356, 370, 371, 484],这似乎就是您想要的。

不确定,它如何扩展到更长的肽列表(我在实践中假设这些列表有四个以上的元素)。

答案 1 :(得分:1)

peptide = [113,129,128,114]
peptide *= 2
spectrum = []
for i in range(len(peptide)/2):
    for j in range(i+1,i+4):
       s = 0
       for a in peptide[i:j]:
           s+= a
       spectrum.append(s)
spectrum.sort()
print spectrum
相关问题