欢迎光临
我们一直在努力

DNA序列

"""
DNA序列
DNA序列由一系列核苷酸组成,分别是为A(腺嘌呤)、T(胸腺嘧啶)、C(胞嘧啶)、G(鸟粪嘌呤)
例如,AATCCGCTAG是一个DNA序列。
在研究DNA时,识别DNA中的重复序列非常有用,
给定一个表示DNA序列的字符串,
返回所有在字符串中出现不止一次的长度为10的序列(子字符串)
"""
from collections import defaultdict

def dna_analysis(s):
    """
    分析DNA序列,寻找重复的k-mer子串。

    :param s: 输入的DNA序列字符串
    :return: 所有重复出现两次的长度为k的子串列表,其中k为预定义的标准长度
    """
    # 定义标准k-mer长度
    standard = 10
    # 构建字符到整数的映射,用于将字符转换为二进制表示
    ht_char = {"A":0,"C":1,"G":2,"T":3}
    # 初始化结果列表,用于存储找到的重复k-mer子串
    result = []
    # 获取输入序列的长度
    length = len(s)
    # 如果输入序列长度小于等于标准k-mer长度,则直接返回空结果
    if length <= standard:
        return result
    # 初始化用于存储当前k-mer的二进制表示的变量
    x = 0
    # 构建第一个k-mer的二进制表示
    for char in s[:standard -1]:
        x = (x << 2) | ht_char[char]
    # 使用哈希表记录每个k-mer出现的次数
    ht_count = defaultdict(int)
    # 遍历输入序列,寻找重复的k-mer
    for i in range(length - standard + 1):
        # 更新当前k-mer的二进制表示,将新的字符加入,旧的字符移除
        x = ((x << 2) | ht_char[s[i + standard - 1]]) & ((1 << (standard *2)) -1)
        # 记录当前k-mer出现的次数
        ht_count[x] += 1
        # 如果当前k-mer出现次数达到2次,则将其添加到结果列表
        if ht_count[x] ==2:
            result.append(s[i:i+standard])
    # 返回结果列表
    return result
print(dna_analysis("AAAGTCTGACAAAGTCTGACACAAAGTCTGTT"))
赞(0) 打赏
未经允许不得转载:创想未来 » DNA序列

评论 抢沙发

评论前必须登录!

 

更好的Python学习

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册