如何用Python按位置统计字符串中相同字符的数量?

1 投票
3 回答
747 浏览
提问于 2025-04-16 16:37

举个例子:

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

这两个字符串在4个位置上是完全一样的,所以我想要的这个函数会返回4。

有没有什么聪明的方法(也就是快速的方法)来实现这个功能,而不是像显而易见的那样同时遍历两个字符串呢?

谢谢!

Uri

3 个回答

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倍。

1

虽然我更喜欢delnan的生成器表达式,但这个方法也可以用:

>>> from itertools import imap
>>> from operator import eq
>>> sum(imap(eq, 'abcde', 'aacce'))
3
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)

撰写回答