在Python中使用另一个列表在列表中查找序列

时间:2018-06-27 01:41:02

标签: python list comparison comparison-operators

我有一个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 :(得分:1)

这是一个单行函数,它将检查列表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
>>>

答案 1 :(得分:0)

您必须一一检查清单中的每个位置。 开始遍历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)

答案 2 :(得分:0)

使用切片,编写一个有效的函数来完成您要寻找的事情非常简单:

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])

答案 3 :(得分:0)

这里有一些很好的答案,但是这是您可以使用字符串作为媒介来解决它的另一种方法。

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

这基本上将列表中的元素转换为字符串,并使用in运算符,该运算符可以完成您在此情况下的预期工作,检查l1是否在l2中。 / p>