Python中如何判断一个列表是否以另一个列表开头?
Python判断列表是否以另一个列表开头的实现方法
核心一行代码实现
写法1:切片比较(直观易读)
如果要判断列表a是否是列表b的前缀,直接使用:
len(a) <= len(b) and b[:len(a)] == a
针对你给出的示例:
a = [0, 1] b = [0, 1, 2, 3] print(len(a) <= len(b) and b[:len(a)] == a) # 输出True
如果需要判断任意一个列表是否是另一个的前缀,可以直接写:
(len(a) <= len(b) and b[:len(a)] == a) or (len(b) <= len(a) and a[:len(b)] == b)
写法2:迭代比较(性能更优)
如果处理的列表长度很大,切片会生成临时列表占用额外内存,可以用all()+zip()的迭代写法,遇到第一个不相等元素就直接终止比较,性能更高:
# 判断a是否是b的前缀 len(a) <= len(b) and all(x == y for x, y in zip(a, b))
如果只需要判断两个列表是否互为前缀(任意一个是另一个的开头),可以省略长度判断,直接写:
all(x == y for x, y in zip(a, b))
注:
zip()会自动在较短的列表遍历结束后停止,所以该写法天然适配双向前缀判断的场景,也兼容空列表作为前缀的情况。
内容的提问来源于stack exchange,提问作者user16519472
相关产品推荐
相关产品推荐

