weixin_73062642 2022-12-19 14:19 采纳率: 100%
浏览 91
已结题

关于#python#的问题:一条序列中的元素与另一条序列中的元素一一对应的比较方法

刚刚学python,想写一个关于文本内容比对的代码,这是从文本中摘取的几列内容
#Sequence Barcode Count Percentage(%)
AAGAGTGTATGTAGGGAGGA barcodeMD-AS-17MD-S-50 73974821 1.240810
GGTGGAAGGGGGAGGTGGTG barcodeMD-AS-21MD-S-61 73670799 1.235710
GGTGGAAGGGCTAGGGAGCA barcodeMD-AS-21MD-S-50 73627661 1.234987
GGAGTTATGGCTGAGTGGTT ambiguous 22315579 0.374308
我需要比对的ambiguous这一行的Sequence和其他列的Sequence中不同的碱基,如果超过3个碱基不同,就将他舍弃,如果是三个碱基以下则将其写入文本文件中,并输出一共有多少有个碱基差异小于3个序列。
现在代码写完了,但是我嵌套了三个循环导致代码运行速度很慢,有办法可以提高他跑的速度呢?
目前我采用的方法是,一条序列中的元素与另一条序列中的元素,一一对应进行比较,还有别的方法可以达到这样的效果吗?

allcount = 0 #定义一个计数器 
for w in range(0,listAmbiguousLen): #我将所有的ambiguous列添加到了一个列表中,listAmbiguousLen 指的是ambiguous一共有多少行
    for u in range(0,lenSeq): #Seq是整个文本,lenSeq指的是这个文本一共有多少行
        count = 0  # 定义一个计数器
        uncount = 0 
        for x in range(0,lenAmbiguous): # lenAmbiguous 指的是Sequence列中,碱基的个数,一般为20个
            if listAmbiguous[w][x] == Seq[u][x]: #如果first的元素与list的元素相同
                count = count + 1  
            else: # 如果不相同
                uncount = uncount+1  
            if uncount>3: # 如果碱基不同的个数大于3个,则舍弃
                break
            elif count > lenAmbiguous-number: #如果碱基小于三个,就把他写入文档中
                allcount = allcount + 1 #allcount+1
                l.write(str(uncount)+"\t"+listAmbiguous[w]+"\t\t"+Seq[u])
                break
  • 写回答

5条回答 默认 最新

  • chuifengde 2022-12-19 16:33
    关注
    import Levenshtein
    
    a = 'GGAGTTATGGCTGAGTGGTT'
    b = 'GGTGGAAGGGCTAGGGAGCA'
    
    res = Levenshtein.hamming(a, b)
    print(res)
    --result
    10
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 C++map释放不掉
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
  • ¥15 关于E22-400T22S的LORA模块的通信问题
  • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路