Проверьте, являются ли индексы элементов в двух списках последовательными - PullRequest
0 голосов
/ 31 октября 2018

Если 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 я запутался, потому что не уверен, как проверять порядковые номера в двух разных списках.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Следующее будет работать, основываясь на параметре start метода list.index:

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 или все не найдены.

0 голосов
/ 31 октября 2018

Возьмите один элемент из списка ввода и сканируйте вперед по второму списку, пока не будет найдено совпадение, затем выберите следующий элемент, продолжайте вперед и т. Д.

Используя итераторы, получить следующее значение для тестирования достаточно просто. Создайте итератор для 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 - это (пустой список никогда не может быть надмножеством).

0 голосов
/ 31 октября 2018

получить список индексов для каждого элемента в исходном списке во втором списке и проверить, находятся ли их комбинации в порядке возрастания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...