【发布时间】:2017-01-08 16:23:51
【问题描述】:
我想检查一个字符串是否包含所有子字符串的单词并保留它们的顺序;目前我正在使用以下代码;然而,它非常基本,似乎效率低下,并且可能有更好的方法来做到这一点。如果您能告诉我更有效的解决方案是什么,我将不胜感激。抱歉有一个菜鸟问题,我是编程新手,无法找到好的解决方案
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 秒(高度准确,但似乎需要额外的时间)
【问题讨论】:
-
您只需要
all:)))print all(x in a for x in b) -
如果你也将
main拆分成一个列表,你可以使用apply this回答。 -
@alfasin all 似乎都返回 True 即使单词的顺序不同;例如 a = "我的城堡相信世界上最大的城堡是布拉格城堡" b = "最大的城堡".split(' ') 返回为 True,虽然它应该是 false
-
alfasin 的代码应为
it = iter(a); print all(x in it for x in b)以说明订单。请参阅我之前链接的Q/A。 -
@Copperfield 只会检查
b是否是a的子字符串,而不是子序列。b中的单词不必在a中连续出现。
标签: python string python-2.7 substring