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 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计