You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:49:49