0

使用 Python,如何检查字符串 (A) 中的 3 个连续字符是否也包含在另一个字符串 (B) 中?Python中有内置函数吗?

例子:

A = FatRadio
B = fradio

假设我定义了阈值 3,python 脚本应该返回 true,因为 B 中有三个连续的字符,它们也包含在 A 中(请注意,这也是 4 和 5 个连续字符的情况)。

4

3 回答 3

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!
于 2013-08-13T12:24:33.383 回答
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)

哪个应该表现更好,尤其是当匹配位于字符串的开头时。

于 2013-08-13T12:58:32.837 回答
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]
于 2013-08-13T12:45:13.093 回答