如何判断二维Tabu列表中是否存在包含指定子序列的子列表
检查二维Tabu列表中是否存在按顺序包含指定列表的子列表
问题说明
需要判断二维Tabu列表中是否存在某个子列表,按顺序包含指定测试列表的全部元素。要求必须匹配测试列表的所有元素且严格保持顺序,不能通过转为集合的方式处理。
示例:
Tabu = [[1, 2, 3], [3, 2, 1, 0]] Test = [3, 2, 1] # 存在匹配(Tabu的第二个子列表包含该序列) Test2 = [1, 3, 2] # 不存在匹配
实现思路
核心逻辑是遍历Tabu中的每个子列表,检查该子列表是否包含测试列表作为顺序一致的子序列(连续或非连续均可):
- 遍历Tabu的每个子列表
- 对每个子列表,用指针追踪测试列表的匹配进度:
- 初始化测试列表的索引为0
- 遍历子列表的每个元素,若当前元素与测试列表当前索引的元素匹配,则测试索引+1
- 若测试索引达到测试列表长度,说明找到匹配,直接返回
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
相关产品推荐
相关产品推荐

