Возьмите один элемент из списка ввода и сканируйте вперед по второму списку, пока не будет найдено совпадение, затем выберите следующий элемент, продолжайте вперед и т. Д.
Используя итераторы, получить следующее значение для тестирования достаточно просто. Создайте итератор для lst1
с iter()
, а затем функция next()
даст вам следующий элемент в списке. Когда этот вызов повышается 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
пусто (пустой список всегда упорядоченное подмножество) и False
, если lst1
не пусто, но lst2
- это (пустой список никогда не может быть надмножеством).