如何使用python按位置计算字符串中相同字符的数量?

时间:2011-04-28 22:49:41

标签: python string

例如:

String 1: AGGCCT
          || | |
String 2: AGCCAT

这两个字符串在4个位置是相同的,所以我想要的函数将返回4。

除了显示同时迭代两个字符串的明显方法之外,还有一种聪明的(即快速)方法吗?

谢谢! URI

3 个答案:

答案 0 :(得分:7)

我不认为任何“聪明”的技巧会胜过明显的方法,如果它执行得好:

sum(c1 == c2 for c1, c2 in itertools.izip(s1, s2))

或者,如果使用布尔算术让你烦恼,

sum(1 for c1, c2 in itertools.izip(s1, s2) if c1 == c2)

答案 1 :(得分:1)

虽然我更喜欢delnan的生成器表达式,但这也适用:

>>> from itertools import imap
>>> from operator import eq
>>> sum(imap(eq, 'abcde', 'aacce'))
3

答案 2 :(得分:1)

如果你正在寻找更好的表现,我怀疑为此难以击败numpy:

import numpy as np
a1 = np.frombuffer(s1, dtype=np.byte)
a2 = np.frombuffer(s2, dtype=np.byte)
print (a1==a2).sum()

在我的系统上,这比使用itertools快10倍。