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

如何正确实现判断整数列表是否为另一列表子序列的is_subsequence函数?

解决子序列判断函数的问题

我来帮你搞定这个is_subsequence函数的实现!先看看你当前代码里的几个问题:

  • 你用的list2 in list1是在判断整个list2是不是list1的连续子列表,但子序列允许元素间有间隔,这个判断逻辑完全不对;
  • 循环里的缩进有问题,代码会直接报错;
  • 没有处理子序列最核心的要求——元素必须和原列表顺序一致,你当前的逻辑根本没覆盖这点。

正确的实现思路:双指针法

判断子序列最经典且高效的方法就是用双指针:一个指针遍历原列表list1,另一个指针跟踪list2的匹配进度。只要list1里的元素和list2当前指针位置的元素匹配,就移动list2的指针;如果list2的指针走完所有元素,说明匹配成功;如果list1遍历完还没匹配完list2,就说明匹配失败。

完整代码实现

def is_subsequence(list1, list2):
    # 特殊情况:空列表是任何列表的子序列
    if not list2:
        return True
    
    # 初始化list2的匹配指针
    match_index = 0
    len_list2 = len(list2)
    
    # 遍历list1的每一个元素
    for num in list1:
        # 如果当前元素和list2待匹配的元素一致
        if num == list2[match_index]:
            match_index += 1
            # 一旦match_index走到list2末尾,说明全部匹配完成
            if match_index == len_list2:
                return True
    
    # 遍历完list1都没匹配完list2,返回False
    return False

测试几个典型场景

  • 正常匹配:is_subsequence([1,2,3,4], [2,4]) → 返回True
  • 顺序错误:is_subsequence([1,2,3,4], [4,2]) → 返回False
  • 完全匹配:is_subsequence([5,1,3], [5,1,3]) → 返回True
  • 空列表:is_subsequence([1,2], []) → 返回True
  • 匹配失败:is_subsequence([1,2], [1,3]) → 返回False

这个逻辑完美覆盖了子序列的核心要求:元素顺序一致,允许间隔,而且时间复杂度是O(n)(n是list1的长度),效率很高。

内容的提问来源于stack exchange,提问作者Royalking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:17:33