2024-06-28 19:22:41 发布
网友
这就是我想要的行为:
a: IGADKYFHARGNYDAA c: KGADKYFHARGNYEAA 2 difference(s).
|
您可以使用内置的^{}函数或^{}在两个字符串上同时迭代,而在输入量很大的情况下,后者的性能更高一些。如果字符串的大小不同,则只对较短的部分进行迭代。如果是这种情况,则可以用不匹配指示字符填充其余字符。
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', '*', '*', '*', '*', '*']
['*', '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)) )
理论
|
字符,用新字符串存储结果。另外,为每个不同的字符增加一个从零开始的整数值。实施
您可以使用内置的^{} 函数或^{} 在两个字符串上同时迭代,而在输入量很大的情况下,后者的性能更高一些。如果字符串的大小不同,则只对较短的部分进行迭代。如果是这种情况,则可以用不匹配指示字符填充其余字符。
示例
下面是一个简单的测试,选项与上面的示例略有不同。注意,我使用下划线来指示不匹配的字符,以便更好地演示如何将结果字符串扩展到较长字符串的大小。
输出:
我想这个exmaple在这个特定的情况下会对您起作用,不会有太多的复杂性,也不会与您的python软件版本存在互操作性问题(请升级到2.7版):
输出:
['*', 'E', '*', '*', 'K', '*', '*', '*', '*', '*']
很少的特瓦金,你可以得到你想要的…告诉我如果有帮助的话:-)
更新
您也可以使用:
输出:
更新2
您可以这样修改代码:
输出:
相关问题 更多 >
编程相关推荐