簡體   English   中英

函數內部函數,python遞歸列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM