使用Python,我如何检查字符串(A)中的3个连续字符是否也包含在另一个字符串(B)中? Python中是否有内置函数?
示例:
A = FatRadio
B = fradio
假设我已经定义了一个阈值3,那么python脚本应该返回true,因为B中有三个连续的字符也包含在A中(注意这也是4和5个连续字符的情况)。
答案 0 :(得分:2)
这个怎么样?
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!
答案 1 :(得分:2)
您可以使用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)
哪个应该表现得更好,特别是当匹配位于字符串的开头时。
答案 2 :(得分:1)
我不知道任何内置函数,所以我想最简单的实现将是这样的:
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]