2017-03-18 70 views
0
def list(small,big): 
    for i in range(len(big)): 
     if small[i]!=big[i]: 
      break 

    else: 
     return False 

嗨,我是新来的蟒蛇。我想查找列表中的数字是否在另一个列表中。所以[7,8,4]和[8,5,1]是[7,8,5,4,1]的子序列,应该返回True,但是[7,8,8]和[7,1,8 ]不是,应该返回False在另一个列表中列出

+0

你的问题不明确。你能否提供一个想要的输入和输出的例子? – manvi77

+0

[测试一个列表是否包含另一个Python列表]可能的重复(http://stackoverflow.com/questions/3847386/testing-if-a-list-contains-another-list-with-python) –

+0

这不是列表中的子序列的测试。例如,8,5,1不会出现在7,8,5,4,1中。必须考虑'4'或任何其他数字或数字组。 –

回答

0

像这样的工作 既然你是一个新手,建筑物上的功能的想法

def lister(small,big): 
    for i in range(len(small)): 
     if small[i] not in big: 
      return False 
    return True 

print(lister([1,2,3],[1,2,3,4,5])) 

定义功能lister因为名单已经是一个内置的功能在Python

编辑:找到一个子序列,它相信它可以做到如下:

def lister(small,big): 
    for i in range(len(small)): 
     if small[i] not in big: 
      return False 
    if " ".join([str(x) for x in small]) in str(" ".join([str(y) for y in big])): 
     return True 
    else: 
     return False 


print(lister([3,5],[1,2,3,4,5])) 
+0

这给打印真(lister([7,1,8],[7,8,5,4,1]))。 –

+0

谢谢先生。但实际上,如果我将[1,2,2]与[1,2,3,4,5]进行比较,它将返回True,因为它不是一个子序列,所以它应该是False – hrk23

+0

好的..你可以做这与集...然后....给我一秒 – repzero

0

这是一个递归方法。它适用于所有的例子。基本上,list1是list2的子序列,如果A)list1的第一个元素在list2中并且B)list1的其余部分是list2的其余部分的子序列。

def subsequence(list1, list2): 
    if not list1: 
      return True 
    head, *tail = list1 
    try: 
      index = list2.index(head) 
      return subsequence(tail, list2[index+1:]) 
    except ValueError: 
      return False 
0

这里是另一种选择:

def IsListInList(listA, listB): 
    res = False 
    for index,val in enumerate(listA): 
     if (val in listB): 
      listB = listB[listB.index(val)+1:] 
      res = True 
     else: 
      res = False 
      break 
    return res 
相关问题