Python中如何实现类似字符串find的列表连续子序列查找功能
Python中如何实现类似字符串find的列表连续子序列查找功能
嗨,我完全懂你的需求!你已经知道字符串可以用str.find()找子串的起始位置,列表能用list.index()找单个元素的索引,但现在想在列表里找连续的子序列,就像'12345'.find('234')那样,对吧?
确实Python的列表没有内置这个功能,不过我们只需要写几行代码就能实现和str.find()行为一致的功能。
基础实现:找到第一个匹配的起始索引
这个函数会返回子列表第一次出现的起始索引,没找到就返回-1,和str.find()的逻辑完全对齐:
def find_sublist(lst, sublist): sub_length = len(sublist) # 遍历到足够的位置,避免切片越界 for i in range(len(lst) - sub_length + 1): # 用切片取出和子列表长度相同的片段对比 if lst[i:i+sub_length] == sublist: return i # 没找到返回-1 return -1
试试你的例子:
my_list = [1,2,3,4,5] print(find_sublist(my_list, [2,3,4])) # 输出1,完美对应字符串find的结果!
进阶:找到所有匹配的起始索引
如果你需要找出所有出现的位置,可以稍微修改一下:
def find_all_sublists(lst, sublist): sub_length = len(sublist) match_indices = [] for i in range(len(lst) - sub_length + 1): if lst[i:i+sub_length] == sublist: match_indices.append(i) return match_indices
比如列表是[1,2,3,2,3,4],调用这个函数找[2,3]就会返回[1,3]。
本质上就是利用Python列表的切片特性,每次截取和目标子列表长度一致的片段做对比,逻辑简单又高效,完全能满足你的需求~
备注:内容来源于stack exchange,提问作者Frost Dream
相关产品推荐
相关产品推荐

