Python如何判断一个列表按顺序包含在另一个列表内
判断列表包含关系时保留顺序的实现方法
原来使用set.issubset的方案只校验元素是否存在,完全忽略顺序,因此无法满足需求。你需要实现的是有序子序列判断逻辑:要求a中所有元素在b中都存在,且出现顺序和b中完全一致(元素不需要连续)。
实现方案
1. 双指针法(直观易理解)
时间复杂度为O(len(b)),空间复杂度O(1),性能优异且逻辑清晰:
def is_ordered_subset(a: list, b: list) -> bool: # 空列表默认判定为符合要求 if not a: return True ptr_a = 0 len_a = len(a) for elem in b: if elem == a[ptr_a]: ptr_a += 1 # 已经匹配完a的所有元素,直接返回True if ptr_a == len_a: return True return ptr_a == len_a
2. 迭代器法(Pythonic简写版)
利用Python迭代器的记忆特性,代码更简洁:
def is_ordered_subset(a: list, b: list) -> bool: b_iter = iter(b) return all(x in b_iter for x in a)
效果验证
使用你给出的测试用例,传入b = [1,2,3,4,5]测试结果如下:
- a=[1,3,2,5] → 返回False(不满足)
- a=[1,2,3,5] → 返回True(满足)
- a=[3,4,5] → 返回True(满足)
- a=[1,2,4,3,5] → 返回False(不满足)
- a=[1,2,3,4,5] → 返回True(满足)
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

