如果列表的开头恰好是另一个列表的元素,那么检查的最简单(最pythonic方式)是什么?请考虑以下示例:
li = [1,4,5,3,2,8]
#Should return true
startsWithSublist(li, [1,4,5])
#Should return false
startsWithSublist(list2, [1,4,3])
#Should also return false, although it is contained in the list
startsWithSublist(list2, [4,5,3])
当然我可以遍历列表,但我想有一种更简单的方法。两个列表永远不会包含两次相同的元素,第二个列表将始终比第一个列表更短或更长。要匹配的列表长度是可变的。
如何在Python中执行此操作?
答案 0 :(得分:13)
使用列表切片:
>>> li = [1,4,5,3,2,8]
>>> sublist = [1,4,5]
>>> li[:len(sublist)] == sublist
True
答案 1 :(得分:3)
您可以使用all
执行此操作,而无需切片并创建其他列表:
def startsWithSublist(l,sub):
return len(sub) <= l and all(l[i] == ele for i,ele in enumerate(sub))
如果您找到不匹配的元素,它将短路;如果所有元素都相同,则返回True,您也可以使用itertools.izip
:
from itertools import izip
def startsWithSublist(l,sub):
return len(sub) <= l and all(a==b for a,b in izip(l,sub))