Вы можете начать с чего-то вроде:
set(lst1).issubset(lst2)
, чтобы увидеть, содержится ли lst1 в порядке игнорирования lst2.Если он проходит проверку того, что один список содержится в другом, то вы можете сделать что-то вроде:
ii = lst2.index(lst1[0])
if lst2[ii:ii+len(lst1)] == lst1:
return True
else:
return False
Первоначально я заявил, что первая проверка не имеет отношения к второй, хотя вам придется правильнообрабатывать ValueError
, если первый элемент lst1 отсутствует в lst2.
Редактировать: Как примечание, я сравнил версию своего кода с ян и моя значительно быстрее почти во всех случаях, особенно если len (lst1) больше (вверхдо 200-кратного ускорения по сравнению с реализацией Яна).Попробуйте с модулем timeit
.
def check(lst1,lst2):
try:
ii = lst2.index(lst1[0])
except ValueError:
return False
if lst2[ii:ii+len(lst1)] == lst1:
return True
else:
return False
В качестве объяснения того, как это работает, ii = lst2.index(lst1[0])
находит индекс в lst2
, который соответствует первому элементу lst1
.Если этот элемент отсутствует в lst2
, он ловит ValueError
и возвращает False
.Если этот элемент существует, lst2[ii:ii+len(lst1)] == lst1
сравнивает все lst1
с подсписком lst2
, начиная с соответствующего элемента и принимая следующие len(lst)
элементы.