Find Frequent Words with Mismatches and Reverse Complements

来源:互联网 发布:聊天表情软件下载 编辑:程序博客网 时间:2024/06/07 01:10

这里写图片描述
对于这道题的解法 和上一道题是类似的,只要先找出指定大小的kmer,然后判断满足汉明距离小于d而且其反响互补链的汉明距离也要小于d,满足这两个条件这两个链的相似kmer之和最多的链,结果肯定是成对出现的,
python代码:

def hanming(a, b):    ham = 0    for i in range(len(a)):        if a[i] != b[i]:            ham += 1    return hamdef 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 merdef reverse(ds):    ds1=''    for i in ds:        if i=='A':            ds1+='T'        elif i=='C':            ds1+='G'        elif i=='G':            ds1+='C'        else:            ds1+='A'    return ds1[::-1]import itertoolsdna = input()k_h = list(map(int,input().split()))k=k_h[0]h=k_h[1]result={}dnas = [''.join(x) for x in itertools.product('ACGT', repeat=k)] #使用itertools迭代器产生所有kmerfor km in dnas:    result[km]=0    for key in kmer(dna,k).keys():        r_km=reverse(km)        if hanming(km,key)<=h:            result[km]+=kmer(dna,k)[key]        if hanming(r_km, key) <= h: #判断其反转是否也符号要求,如果是,就加上的value            result[km]+=kmer(dna,k)[key]max_=max(result.values())for key,value in result.items():    if result[key]==max_:        print(key,end=" ")
原创粉丝点击