计算两个字符串的字母差

2024-06-28 19:22:41 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我想要的行为:

a: IGADKYFHARGNYDAA
c: KGADKYFHARGNYEAA
2 difference(s).

Tags: differencekgadkyfhargnyeaaigadkyfhargnydaa
3条回答

理论

  1. 同时遍历两个字符串并比较字符。
  2. 通过分别向结果中添加空格键或|字符,用新字符串存储结果。另外,为每个不同的字符增加一个从零开始的整数值。
  3. 输出结果。

实施

您可以使用内置的^{}函数或^{}在两个字符串上同时迭代,而在输入量很大的情况下,后者的性能更高一些。如果字符串的大小不同,则只对较短的部分进行迭代。如果是这种情况,则可以用不匹配指示字符填充其余字符。

import itertools

def compare(string1, string2, no_match_c=' ', match_c='|'):
    if len(string2) < len(string1):
        string1, string2 = string2, string1
    result = ''
    n_diff = 0
    for c1, c2 in itertools.izip(string1, string2):
        if c1 == c2:
            result += match_c
        else:
            result += no_match_c
            n_diff += 1
    delta = len(string2) - len(string1)
    result += delta * no_match_c
    n_diff += delta
    return (result, n_diff)

示例

下面是一个简单的测试,选项与上面的示例略有不同。注意,我使用下划线来指示不匹配的字符,以便更好地演示如何将结果字符串扩展到较长字符串的大小。

def main():
    string1 = 'IGADKYFHARGNYDAA AWOOH'
    string2 = 'KGADKYFHARGNYEAA  W'
    result, n_diff = compare(string1, string2, no_match_c='_')

    print "%d difference(s)." % n_diff  
    print string1
    print result
    print string2

main()

输出:

niklas@saphire:~/Desktop$ python foo.py 
6 difference(s).
IGADKYFHARGNYDAA AWOOH
_||||||||||||_|||_|___
KGADKYFHARGNYEAA  W

我想这个exmaple在这个特定的情况下会对您起作用,不会有太多的复杂性,也不会与您的python软件版本存在互操作性问题(请升级到2.7版):

a='IGADKYFHARGNYDAA'
b='KGADKYFHARGNYEAA'

u=zip(a,b)
d=dict(u)

x=[]
for i,j in d.items(): 
    if i==j:
        x.append('*') 
    else: 
        x.append(j)

print x

输出:['*', 'E', '*', '*', 'K', '*', '*', '*', '*', '*']


很少的特瓦金,你可以得到你想要的…告诉我如果有帮助的话:-)


更新

您也可以使用:

a='IGADKYFHARGNYDAA'
b='KGADKYFHARGNYEAA'

u=zip(a,b)
for i,j in u:
    if i==j:
        print i,'--',j
    else: 
        print i,'  ',j

输出:

I    K
G -- G
A -- A
D -- D
K -- K
Y -- Y
F -- F
H -- H
A -- A
R -- R
G -- G
N -- N
Y -- Y
D    E
A -- A
A -- A

更新2

您可以这样修改代码:

y=[]
counter=0
for i,j in u:
    if i==j:
        print i,'--',j
    else: 
        y.append(j)
        print i,'  ',j

print '\n', y

print '\n Length = ',len(y)

输出:

I    K
G -- G
A -- A
D -- D
K -- K
Y -- Y
F -- F
H -- H
A -- A
R -- R
G -- G
N -- N
Y -- Y
D    E
A -- A
A    X

['K', 'E', 'X']

 Length =  3
def diff_letters(a,b):
    return sum ( a[i] != b[i] for i in range(len(a)) )

相关问题 更多 >