如果将list1定义为[15,1,20]
并且list2被定义为[6,15,3,1,6,20]
该函数将返回True,因为列表2包含(15,1,20)
的顺序相同。
但是,如果将列表2定义为[6,1,15,20,3]
,则序列为(1,15,20)
,因此它将返回False。
def sublist(lst1,lst2):
for i in lst1:
if i in lst2:
if ## ?? ##
return True
return False
if语句让我感到困惑,因为我不确定如何检查两个不同列表中的连续数字。
答案 0 :(得分:2)
从输入列表中获取一个项目,然后向前扫描第二个列表,直到找到匹配项,然后获取下一个项目,继续向前,等等。
使用迭代器,对下一个值进行测试非常简单。使用iter()
为lst1
创建一个迭代器,然后next()
function为您提供列表顺序中的下一项。当该电话引发StopIteration
时,您就知道已经测试了第一个列表中的所有值:
def sublist(lst1, lst2):
source = iter(lst1)
try:
item = next(source)
for value in lst2:
if item == value:
item = next(source)
return False
except StopIteration:
# all items in lst1 checked
return True
演示:
>>> lst1 = [15, 1, 20]
>>> sublist(lst1, [6, 15, 3, 1, 6, 20])
True
>>> sublist(lst1, [6, 1, 15, 20, 3])
False
请注意,如果True
为空(空列表总是 一个有序子集),该函数还会返回lst1
;如果{{1} }不是空的,但是False
是(空列表永远不能是超集)。
答案 1 :(得分:1)
基于list.index
方法的start
参数,以下操作将起作用:
def sublist(lst1, lst2):
ind = 0
for a in lst1:
try:
ind = lst2.index(a, ind)
except ValueError:
return False
return True
>>> sublist([1,2,3], [4,1,3,2,5])
False
>>> sublist([1,2,3], [4,1,2,5,3])
True
此操作会迭代查找lst1
中lst2
的元素,同时适当地向前查找的起始索引,直到在lst2
的其余部分或全部中找不到任何元素为止找到了。
答案 2 :(得分:0)
获取第二个列表中原始列表中每个项目的索引列表,并检查它们的组合是否按升序排列