检查lis中的特定序列

2024-03-29 10:31:11 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我必须检查子列表是否存在于列表中,并且也必须按顺序出现在列表中。如果列表中存在子列表,则函数应返回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。你知道吗


Tags: 函数infalsetrue列表forlenif
3条回答

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

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

你的主要问题是,你给每个职位一个值(真或假)。在第一个位置上找不到子列表并不意味着以后找不到它,因此您应该等到找到它(当您找到它时停止迭代并在第一个位置上返回True),或者确定没有找到它(在您检查完所有元素后返回False,它们“不是它”)。你知道吗

你很接近!你知道吗

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(L)-len(sublist)+1。你知道吗

相关问题 更多 >