使用 Python,如何检查字符串 (A) 中的 3 个连续字符是否也包含在另一个字符串 (B) 中?Python中有内置函数吗?
例子:
A = FatRadio
B = fradio
假设我定义了阈值 3,python 脚本应该返回 true,因为 B 中有三个连续的字符,它们也包含在 A 中(请注意,这也是 4 和 5 个连续字符的情况)。
使用 Python,如何检查字符串 (A) 中的 3 个连续字符是否也包含在另一个字符串 (B) 中?Python中有内置函数吗?
例子:
A = FatRadio
B = fradio
假设我定义了阈值 3,python 脚本应该返回 true,因为 B 中有三个连续的字符,它们也包含在 A 中(请注意,这也是 4 和 5 个连续字符的情况)。
这个怎么样?
char_count = 3 # Or whatever you want
if len(A) >= char_count and len(B) >= char_count :
for i in range(0, len(A) - char_count + 1):
some_chars = A[i:i+char_count]
if some_chars in B:
# Huray!
您可以使用该difflib
模块:
import difflib
def have_common_triplet(a, b):
matcher = difflib.SequenceMatcher(None, a, b)
return max(size for _,_,size in matcher.get_matching_blocks()) >= 3
结果:
>>> have_common_triplet("FatRadio", "fradio")
True
但是请注意,SequenceMatcher
这不仅仅是找到第一个常见的三元组,因此它可能比简单的方法花费更多的时间。一个更简单的解决方案可能是:
def have_common_group(a, b, size=3):
first_indeces = range(len(a) - len(a) % size)
second_indeces = range(len(b) - len(b) % size)
seqs = {b[i:i+size] for i in second_indeces}
return any(a[i:i+size] in seqs for i in first_indeces)
哪个应该表现更好,尤其是当匹配位于字符串的开头时。
我不知道任何内置函数,所以我猜最简单的实现是这样的:
a = 'abcdefgh'
b = 'foofoofooabcfoo'
for i in range(0,len(a)-3):
if a[i:i+3] in b:
print 'then true!'
可以缩短为:
search_results = [i for in range(0,len(a)-3) if a[i:i+3] in b]