Generate the Theoretical Spectrum of a Cyclic Peptide

本文介绍了一种用于分析肽链序列的Python算法。该算法能够处理原序列及其循环肽链产生的子序列,并确保输出结果中考虑到了重复序列及冲突序列的情况。通过输入特定的肽链序列,算法可以生成所有可能的子序列及其对应的分子量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
这道题的坑点让人很难想到,首先针对原序列分离出来的肽链如果重复出现,则结果要重复输出,但是循环肽链产生子序列如果与原序列中冲突,需要将其移除,即不进行输出。
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=' ')
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值