寻找字符串相似度百分比

时间:2019-05-03 22:45:43

标签: python-3.x string similarity

我想找到两个字符串之间的匹配数,以便可以计算相似性百分比。我不想下载任何东西就这样做,因为这给我带来了麻烦。我尝试下载biopython zip文件,但无法弄清楚如何进行设置。我希望我可以将其转变为易于用于不同序列的函数。不需要处理任何内容,例如每个字符串50个字符。

我要比较的序列是:

virX = 'TTTTCTTATTGT'
virZ = 'GTGGCAGACGGT'
virY = 'CTTCCTCACCGA'
virU = 'ATTACCAAAAGA'
我正在寻找的

输出是: 1)每个序列之间的相似度百分比 2)两个相似度最高的序列

这是可行的,但要调整为其他顺序很费时间:

dnaA = 'ATATGCC'
dnaB = 'AAAGCGC'

count = 0
if dnaA[0] == dnaB[0]:
    count +=1
if dnaA[1] == dnaB[1]:
    count +=1
if dnaA[2] == dnaB[2]:
    count +=1
if dnaA[3] == dnaB[3]:
    count +=1
if dnaA[4] == dnaB[4]:
    count +=1
if dnaA[5] == dnaB[5]:
    count +=1
if dnaA[6] == dnaB[6]:
    count +=1

print(count, (count / len(dnaA) * 100), '%')

我尝试了一下,但是没用:

count = 0
for i in dnaA:
    if i == dnaB[i]:
        count += 1

我尝试过:

from itertools import izip
def hamming_distance(str1, str2):
    assert len(str1) == len(str2)
    return sum(chr1 != chr2 for chr1, chr2 in izip(str1, str2))

print(hamming_distance(dnaA, dnaB))

返回错误:

  

“跟踪(最近一次通话最近):文件   “ C:/Users/mac03/AppData/Local/Programs/Python/Python37/Wk5FriLab.py”,   第79行,在       从itertools导入izip ImportError:无法从“ itertools”(未知位置)导入名称“ izip””

我试图将izip更改为zip,但这没有用。我也在jupyter笔记本中尝试了此功能,并收到错误消息:

  

“ ImportError跟踪(最近的调用   最后)         5         6   ---->从itertools 7导入zip         8 def hamming_distance(str1,str2):         9断言len(str1)== len(str2)

     

ImportError:无法从“ itertools”导入名称“ zip”(未知)   位置)”

我尝试了这些输入并收到了错误:

python -m ensurepip
  

“文件”“,第6行       python -m surepip我是^ SyntaxError:语法无效”

pip install pip --upgrade
  

“文件”“,第7行       pip安装pip --upgrade                 ^ SyntaxError:语法无效”

pip install biopython
  

“文件”“,第7行       pip安装biopython                 ^ SyntaxError:语法无效”

2 个答案:

答案 0 :(得分:0)

尝试使用此方法计算“计数”(我假设字符串长度相等):

dnaA = 'ATATGCC'
dnaB = 'AAAGCGC'
count = 0
indexB = 0
for i in dnaA:
  if i == dnaB[indexB]:
    count +=1
  indexB +=1

答案 1 :(得分:0)

import

结果:dnaA = 'ATATGCC' dnaB = 'AAAGCGC' matches = [ nucl_A == nucl_B for nucl_A, nucl_B in zip(dnaA, dnaB) ] similarity = sum(matches)/len(matches) similarity

功能:

0.42857142857142855