Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “的时间复杂度是否存在差异?”;在;字符串与列表的运算符?_Python_String_List_Time Complexity_In Operator - Fatal编程技术网

Python “的时间复杂度是否存在差异?”;在;字符串与列表的运算符?

Python “的时间复杂度是否存在差异?”;在;字符串与列表的运算符?,python,string,list,time-complexity,in-operator,Python,String,List,Time Complexity,In Operator,我想知道在列表中搜索字符串是否比使用“in”操作符在字符串中搜索子字符串有什么好处 我始终使用以下命令检查子字符串: str中的substr 但是我遇到了一段代码,它分割了字符串,然后执行了检查 str.split()中的substr 在性能方面是否有任何好处,或者这只是程序员的一个偏好 谢谢 它们做两件不同的事情。两者的复杂度都是O(n),但这并不真正相关,因为你不会因为它们的速度而选择其中一个;你会根据你真正想做的事情做出选择 它们做两件不同的事情。两者的复杂度都是O(n),但这并不真正

我想知道在列表中搜索字符串是否比使用“in”操作符在字符串中搜索子字符串有什么好处

我始终使用以下命令检查子字符串:

str中的substr 但是我遇到了一段代码,它分割了字符串,然后执行了检查

str.split()中的substr
在性能方面是否有任何好处,或者这只是程序员的一个偏好


谢谢

它们做两件不同的事情。两者的复杂度都是O(n),但这并不真正相关,因为你不会因为它们的速度而选择其中一个;你会根据你真正想做的事情做出选择


它们做两件不同的事情。两者的复杂度都是O(n),但这并不真正相关,因为你不会因为它们的速度而选择其中一个;你会根据你真正想做的事情做出选择


如前所述,它可能略有不同:

>>> "Python" in "Monty Python's Flying Circus"
True
>>> "Python" in "Monty Python's Flying Circus".split()
False
从性能角度来看,拆分的成本要高得多(它会创建一个临时列表):


我们可能还认为,如果您要查找的单词接近句子的开头,str中的
sub将是O(1)中的最佳情况(in操作可能用C的strstr编码);虽然str.split()
中的
子项在开始查找单词之前仍然必须拆分整个文本(因此,最好的情况总是至少是O(n),占用更多内存等)。

如前所述,它可能会略有不同:

>>> "Python" in "Monty Python's Flying Circus"
True
>>> "Python" in "Monty Python's Flying Circus".split()
False
从性能角度来看,拆分的成本要高得多(它会创建一个临时列表):


我们可能还认为,如果您要查找的单词接近句子的开头,str中的
sub将是O(1)中的最佳情况(in操作可能用C的strstr编码);虽然str.split()
中的
子元素在开始查找单词之前仍然必须拆分整个文本(因此最好的情况总是至少是O(n),占用更多内存等等)。

明白了。但是如果子字符串是一个用空格分隔的单词,那么执行split()有什么好处吗?明白了。但是如果子字符串是一个用空格分隔的单词,那么使用split()有什么好处吗?
>>> 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