python - python 检查一个字符串是否包含另一个字符串中相同顺序的所有单词?

标签 python string python-2.7 substring

我想检查一个字符串是否包含子字符串的所有单词并保留它们的顺序;目前我正在使用以下代码;然而,它是非常基本的,似乎效率低下,并且可能有更好的方法来做到这一点。如果您能告诉我什么是更有效的解决方案,我将非常感激。抱歉,我提出了一个菜鸟问题,我是编程新手,无法找到好的解决方案

def check(main, sub_split):
    n=0
    while n < len(sub_split):
        result = True
        if sub_split[n] in main:
            the_start =  main.find(sub_split[n])
            main = main[the_start:]

        else:
            result=False
        n += 1
    return result

a = "I believe that the biggest castle in the world is Prague Castle "
b= "the biggest castle".split(' ')

print check(a, b)

更新:有趣;首先感谢大家的回答。也感谢您指出我的代码遗漏的一些地方。我一直在尝试在此处和链接中发布的不同解决方案,我将添加更新它们如何比较并接受答案。

更新: 再次感谢大家提供了出色的解决方案,与我的代码相比,它们中的每一个都有重大改进;我检查了这些建议和我的100000次检查的要求,得到了以下结果; 建议者: Padraic Cunningham - 始终低于 0.4 秒(尽管在仅搜索完整单词时会出现一些误报; 银河 - 0.65 秒; 0.75秒 友好的狗 - 0.70 秒 John1024 - 1.3 秒(高度准确,但似乎需要额外时间)

最佳答案

您可以通过将上一个匹配项的索引 + 1 传递给 find 来简化搜索,无需切片任何内容:

def check(main, sub_split):
    ind = -1
    for word in sub_split:
        ind = main.find(word, ind+1)
        if ind == -1:
            return False
    return True

a = "I believe that the biggest castle in the world is Prague Castle "
b= "the biggest castle".split(' ')

print check(a, b)

如果ind-1那么你之后就没有匹配所以你返回False,如果你彻底了解了所有单词那么所有单词都按顺序在字符串中.

对于确切的单词,您可以对列表执行类似的操作:

def check(main, sub_split):
    lst, ind = main.split(), -1
    for word in sub_split:
        try:
           ind = lst.index(word, ind + 1)
        except ValueError:
            return False
    return True

要处理标点符号,您可以先将其删除:

from string import punctuation

def check(main, sub_split):
    ind = -1
    lst = [w.strip(punctuation) for w in main.split()]
    for word in (w.strip(punctuation) for w sub_split):
        try:
           ind = lst.index(word, ind + 1)
        except ValueError:
            return False
    return True

当然,有些单词带有标点符号是有效的,但这更多是 nltk 的工作,或者您实际上可能想找到包含任何标点符号的匹配项。

关于python - python 检查一个字符串是否包含另一个字符串中相同顺序的所有单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260436/

相关文章:

python - 对 buildbot 构建属性执行字符串转换?

Python:无法从外部进程设置进程变量

mysql - 选择一列是另一列的一部分

java - Marathon GUI 测试如何从 Jtable 中选择没有列名的单元格

python - 无法为 nltk 导入名称 defaultdict 错误

python - 有没有一种官方方法可以在 GTK 中创建离散值范围小部件?

python - 如何在 Sklearn 中为 Matern 内核指定 nu=infinity?

c - 我应该使用 fputs 还是 putchar?

javascript - 我如何调整此 Javascript 代码以在每行输入中打印句子的所有排列?

python - 从python中的IP地址获取响应