搜索列表中的项目顺序

时间:2018-10-22 14:17:16

标签: python-3.x list-comprehension

是否有一种简单的方法来搜索列表中的字符串序列?例如:

testlist = [a,b,c,d,e,f,g,a,b,c,d,j,k,j] 

,我想搜索序列abc并返回索引。因此,要弄清楚我要搜索的字符串是否包含列表中的多个元素。在某些情况下:我有一个包含数据块的列表,我想找出每个数据块在列表中搜索一个重复出现的字符串的大小。

1 个答案:

答案 0 :(得分:2)

好的string search algorithms有很多:KMP,Boyer-Moore和Rabin-Karp。如果您要处理字符,可以使用str.index上的内置''.join(L)函数(str.index在CPython中实现了Boyer-Moore算法:https://github.com/python/cpython/blob/3.7/Objects/stringlib/fastsearch.h)。

但是在大​​多数情况下,朴素的算法已经足够好了。检查haystack的每个索引以找到needle

>>> a, b, c, d, e, f, g, j, k = [object() for _ in range(9)]
>>> haystack = [a, b, c, d, e, f, g, a, b, c, d, j, k, j]
>>> needle = [a, b, c]
>>> for i in range(len(haystack)-len(needle)+1):
...     if haystack[i:i+len(needle)] == needle:
...             print(i)
... 
0
7

复杂度为O(| haystack | * | needle |)。