我想知道与使用“ in”运算符搜索字符串中的子字符串相比,在列表中搜索字符串是否有任何好处。
我一直使用以下方法检查子字符串:
substr in str
但是我遇到了一段将字符串分割然后执行检查的代码。
substr in str.split()
在性能方面或其他方面是否有好处,或者这仅仅是该程序员的偏爱。
谢谢!
答案 0 :(得分:4)
它们做两种不同的事情。两者的复杂度均为O(n),但这并不重要,因为您不会因为它们的速度而选择另一个。您将根据实际想要执行的操作做出选择。
。>>> "o b" in "foo bar" # "o b" is a substring of "foo bar"
True
>>> "o b" in "foo bar".split() # "o b" is not an element of ["foo", "bar"]
False
答案 1 :(得分:1)
正如已经提到的,它可能略有不同:
>>> "Python" in "Monty Python's Flying Circus"
True
>>> "Python" in "Monty Python's Flying Circus".split()
False
从性能的角度来看,拆分要贵得多(它会创建一个临时列表):
>>> from timeit import timeit
>>> timeit("""'Monty' in "Monty Python's Flying Circus".split() """)
0.20677191999857314
>>> timeit("""'Monty' in "Monty Python's Flying Circus" """)
0.03346360499563161
我们还可能会争辩说,如果您要查找的单词在句子的开头附近,则sub in str
将是O(1)中的最佳情况(操作中可能使用C的strstr);而sub in str.split()
在开始寻找单词之前仍将必须拆分整个文本(因此,最佳情况总是至少为O(n),更多的内存消耗等)。