[英]function inside a function, python recursive on a list
def minimizeMaximumPair(lst):
lst.sort()
def compute(aList):
if len(aList) != 0:
return [(aList[0], lst[len(aList) - 1])].extend(compute(aList[1:len(aList) - 1]))
return []
return compute(lst)
當我得到最后一個遞歸步驟時,我得到一個
TypeError: 'NoneType' object is not iterable
我試着什么都沒回來,而且[]
問題是當你調用.extend()
。
您的compute
函數嘗試返回.extend()
的值,即None
。 與.sort()
類似, .extend()
修改對象本身,而不是返回對象的修改副本。 這被稱為可變性。 這是一些有效的代碼:
def compute(aList):
if len(aList) != 0:
out = [(aList[0], lst[len(aList) - 1])]
out.extend(compute(aList[1:len(aList) - 1]))
return out
return []
而不是list.extend
返回None
,你可以使用list.__iadd__
__iadd__
也將列表擴展__iadd__
,但之后返回list
如果您厭惡使用特殊方法,可以使用operator
模塊中的iadd
from operator import iadd
...
def compute(aList):
if len(aList) != 0:
return iadd([(aList[0], aList[-1])], compute(aList[1: -1]))
return []
這是因為extend
是一個不返回任何內容的函數,它只是就地更改列表。 一個可能的解決方案是使用+
代替:
return [(aList[0], lst[len(aList) - 1])] + compute(aList[1:len(aList) - 1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.