Generate the Theoretical Spectrum of a Cyclic Peptide

7 篇文章 0 订阅
6 篇文章 1 订阅

这里写图片描述
这道题的坑点让人很难想到,首先针对原序列分离出来的肽链如果重复出现,则结果要重复输出,但是循环肽链产生子序列如果与原序列中冲突,需要将其移除,即不进行输出。
python 源码:

def kmer(s, k):
    mer = {}
    for i in range(len(s) - k + 1):
        if s[i:i + k] not in mer.keys():
            mer[s[i:i + k]] = 1
        else:
            mer[s[i:i + k]] += 1
    return mer

tailian = input()
result = [0]
dicts = {'G': 57, 'A': 71, 'S': 87, 'P': 97, 'V': 99, 'T': 101, 'C': 103, 'I': 113, 'L': 113, 'N': 114, 'D': 115
    , 'K': 128, 'Q': 128, 'E': 129, 'M': 131, 'H': 137, 'F': 147, 'R': 156, 'Y': 163, 'W': 186}
for i in tailian:
    result.append(dicts[i])
# 生成循环肽链
xunhuan = tailian[2:]
for i in tailian[:-1]:
    xunhuan += i

xunhuans = []
for j in range(2, len(tailian) + 1):
    mers = kmer(tailian, j)
    for k in mers.keys():
        xunhuans.append(k)#保存原肽链每次分离出的子序列,供循环肽链排除使用
        temp = 0
        for l in k:
            temp += dicts[l]
        for t in range(mers[k]):
            result.append(temp)

for m in range(2, len(tailian)):
    merss = kmer(xunhuan, m)
    for n in merss.keys():
        if n in xunhuans:   #如果循环肽链产生的子序列在原肽链产生的子序列中出现,则跳过
            continue
        else:
            temps = 0
            for q in n:
                temps += dicts[q]
            for tt in range(merss[n]):
                result.append(temps)
for data in sorted(result):
    print(data, end=' ')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值