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

如何判断二维Tabu列表中是否存在包含指定子序列的子列表

检查二维Tabu列表中是否存在按顺序包含指定列表的子列表

问题说明

需要判断二维Tabu列表中是否存在某个子列表,按顺序包含指定测试列表的全部元素。要求必须匹配测试列表的所有元素且严格保持顺序,不能通过转为集合的方式处理。

示例:

Tabu = [[1, 2, 3], [3, 2, 1, 0]]
Test = [3, 2, 1]  # 存在匹配(Tabu的第二个子列表包含该序列)
Test2 = [1, 3, 2] # 不存在匹配

实现思路

核心逻辑是遍历Tabu中的每个子列表,检查该子列表是否包含测试列表作为顺序一致的子序列(连续或非连续均可):

  • 遍历Tabu的每个子列表
  • 对每个子列表,用指针追踪测试列表的匹配进度:
    1. 初始化测试列表的索引为0
    2. 遍历子列表的每个元素,若当前元素与测试列表当前索引的元素匹配,则测试索引+1
    3. 若测试索引达到测试列表长度,说明找到匹配,直接返回True
  • 若所有子列表遍历完都未找到匹配,返回False

代码实现

def has_ordered_sublist(tabu_list, test_list):
    test_len = len(test_list)
    if test_len == 0:
        return True  # 空列表默认视为匹配
    
    for sublist in tabu_list:
        test_idx = 0
        for elem in sublist:
            if elem == test_list[test_idx]:
                test_idx += 1
                if test_idx == test_len:
                    return True
    return False

# 测试示例
Tabu = [[1, 2, 3], [3, 2, 1, 0]]
Test = [3, 2, 1]
Test2 = [1, 3, 2]

print(has_ordered_sublist(Tabu, Test))   # 输出: True
print(has_ordered_sublist(Tabu, Test2)) # 输出: False

补充说明

  • 若需要连续元素匹配,可修改逻辑:找到第一个匹配元素后,检查后续连续元素是否与测试列表完全对应
  • 该方法严格遵循题目要求:不使用集合,保持元素顺序,适配无重复元素的测试列表场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:23