2013-11-15 50 views
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。

+0

「它應該返回false」 - 返回或打印? – Amadan

回答

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 
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 
+0

'check([0,1,2,3,4,5],[4,5])# - > False'? – martineau

+0

@馬蒂諾:對不起。修正了錯過! – inspectorG4dget

0

你的主要問題是你給每個位置的值(真或假)。沒有找到第一個位置的子列表並不意味着它不會在以後找到,所以你應該等到你找到它(停止迭代並在你找到它時將第一個位置返回True),或者你確定你沒有(經過所有元素後返回False,他們「不是」)。

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。

+0

你也很近。 'subfunc([0,1,2,3,4,5],[4,5])# - > False' – martineau

+0

@martineau我的壞,現在修復!乾杯 – mbdavis