Поиск последовательности в списке с использованием другого списка в Python - PullRequest
0 голосов
/ 27 июня 2018

У меня есть list = [0, 0, 7], и когда я сравниваю его с anotherList = [0, 0, 7, 0], используя in, это дает мне False.

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

Итак, если я сделаю anotherList2 = [7, 0, 0, 0]:

list in anotherList2 возвращает False

Но, list in anotherList вернуть True

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

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

def in_ist(l1, l2):
    return ''.join(str(x) for x in l1) in ''.join(str(y) for y in l2)

Это в основном превращает элементы списков в строки и использует оператор in, который делает то, что вы ожидаете в этом случае, проверяя, находится ли l1 в l2.

0 голосов
/ 27 июня 2018

Используя слайсы, довольно просто написать эффективную функцию, которая делает то, что вы ищете:

def sequence_in(seq, target):
    for i in range(len(target) - len(seq) + 1):
        if seq == target[i:i+len(seq)]:
            return True
    return False

Что мы можем использовать так:

sequence_in([0, 1, 2], [1, 2, 3, 0, 1, 2, 3, 4])
0 голосов
/ 27 июня 2018

Вот функция с одной строкой, которая проверит, находится ли список a в списке b:

>>> def list_in(a, b):
...     return any(map(lambda x: b[x:x + len(a)] == a, range(len(b) - len(a) + 1)))
...
>>> a = [0, 0, 7]
>>> b = [1, 0, 0, 7, 3]
>>> c = [7, 0, 0, 0]
>>> list_in(a, b)
True
>>> list_in(a, c)
False
>>>
0 голосов
/ 27 июня 2018

Вы должны проверить каждую позицию в списке один за другим. начать перебирать другой список

если первый элемент списка совпадает с текущим элементом в anotherList, начинайте проверку, пока не найдете всю последовательность

Программа идет сюда:

def list_in(list,anotherList):
    for i in range(0,len(anotherList)):
        if(list[0]==anotherList[i]):
            if(len(anotherList[i:]) >= len(list)):
                c=0
                for j in range(0,len(list)):
                    if(list[j]==anotherList[j+i]):
                        c += 1
                        if(c==len(list)):
                            print("True")
                            return
                    else:
                        continue


    print("False")
    return
list = [0,0,7]
anotherList = [0,0,7,0]
anotherList2 = [7,0,0,0]

list_in(list,anotherList)
list_in(list,anotherList2)
...