1

因此,我必须检查是否要检查列表中是否存在子列表,并且还必须按该顺序出现在列表中。如果列表中存在子列表,则该函数应返回 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

4 回答 4

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

于 2013-11-15T01:19:14.203 回答
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
于 2013-11-15T01:16:20.313 回答
0

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

于 2013-11-15T01:16:34.163 回答
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
于 2013-11-15T01:39:45.920 回答