检查列表中的特定序列

时间:2013-11-15 01:09:30

标签: python arrays list

因此,我必须检查是否检查列表中是否存在子列表,并且还必须按顺序出现在列表中。如果列表中存在子列表,则该函数应返回true。如果不是,它应该返回false。我创建了一个试图这样做的函数,有人可以告诉我,如果我在正确的轨道上或我应该修复什么,b / c现在它不起作用。

def subfunc(L,sublist):

  for i in range (len(L)):
        if L[i:i+len(sublist)] == sublist:
              print "true"
        else:
              print "false"

例如,如果子列表为[3,4]且列表为[0,1,2,3,4,5],则应返回true。如果子列表为[5,1],则它应该返回false。

4 个答案:

答案 0 :(得分:0)

>>> def check(L, subL):
...   for i in range(len(L)-len(subL)+1):
...     if L[i:i+len(subL)] == subL:
...       return True
...   return False
... 
>>> check(L, [4,5])
True
>>> check(L, [3,4])
True
>>> check(L, [5,1])
False

答案 1 :(得分:0)

您的主要问题是您为每个职位发放了一个值(真或假)。没有在第一个位置找到子列表并不意味着以后找不到它,所以你应该等到找到它(停止迭代并在找到它时在第一个位置返回True),或者你确定没有(在你完成所有元素之后返回False,并且他们“不是它”)。

答案 2 :(得分:0)

你很亲密!

def subfunc(L,sublist):
    for i in range (len(L)-len(sublist)+1):
        if L[i:i+len(sublist)] == sublist:
              return True
    return False

False需要在循环之外,所以如果循环结束但没有成功,那么将返回false。此外,您只想循环len len(L)-len(子列表)+1。

答案 3 :(得分:0)

这似乎可以解决边缘问题:

def subfunc(L,sublist):
    sublen = len(sublist)
    for i in xrange(len(L)-sublen+1):
        if L[i:i+sublen] == sublist:
            return True
    return False

L = [0,1,2,3,4,5]
print subfunc(L, [0,1])  # --> True
print subfunc(L, [5,1])  # --> False
print subfunc(L, [4,5])  # --> True