我正试图从我的肽中生成所有环状组合的光谱。
这是我的线性光谱代码:
#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
答案 0 :(得分:1)
如果我正确理解了您的问题,您需要所有可能的子列表,每个长度最多为peptide
列表的长度,并且对于该列表中的每个起始位置,在列表的末尾包围。一种方法是使用itertools
中的cycle
和islice
。
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