2013-08-16 21 views
2

我知道這個錯誤已經被問了好幾次,但我堅持我的代碼爲什麼它的回頭率類型錯誤爲什麼我的代碼產生類型錯誤:「NoneType」對象不是可迭代

def merge(s1, s2): 
    if len(s1) == 0: 
     return s2[:] 
    if len(s2) == 0: 
     return s1[:] 
    minElm = [] 
    if s1[0] <= s2[0]: 
     minElm.append(s1.pop(0)) 
    else: 
     minElm.append(s2.pop(0)) 
    return minElm.extend(merge(s1[:], s2[:])) 

list1 = [1,3,5,7,9] 
list2 = [2,4,6,8] 

merged = merge(list1[:], list2[:]) 
print(merged) 

基本上,我想要使用遞歸方法將兩個已排序列表(ASC)合併成單排序列表(ASC)。我肯定我的邏輯是正確的,我只是不明白爲什麼我會得到TypeError: 'NoneType' object is not iterable

爲什麼我會得到TypeError

+2

在一般情況下,當你有不明白的問題,它有助於打印出中間值,或通過調試運行或[交互式可視化工具](http://pythontutor.com/visualize.html),因此您可以找到並非您所期望的第一個值,而不是三個步驟,最終導致錯誤。 – abarnert

+0

感謝您的提示。 – Chilpol

回答

7

return minElm.extend(merge(s1[:], s2[:]))返回None,特別是因爲list.extend方法返回無。相反,做下列操作之一:

minElm.extend(merge(s1[:], s2[:])) 
return minElm 

return minElm + merge(s1[:], s2[:]) 
+0

這是正確的答案。喬恩也有正確的答案,但他落後了30秒,所以我想我會選擇你的答案。但我也會讚揚喬恩的回答。 – Chilpol

+0

@Chilpol我實際上是22秒前;)...但這是一個更完整的答案,指出如何糾正它;) –

+0

是的,我注意到有人在我編寫代碼時回答了問題,然後「擰緊它,我寫了這麼多,我會發布它「。 真正的比賽成爲第一個答案真的很煩人。 –

4

在這裏,我們返回None(如.extend是就地):

return minElm.extend(merge(s1[:], s2[:])) 
相關問題