函数内部函数,python递归列表

时间:2016-01-12 02:47:52

标签: python recursion

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

我尝试了什么都没有,还有一个[]

3 个答案:

答案 0 :(得分:4)

问题在于您致电.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 []

答案 1 :(得分:2)

而不是返回list.extend的{​​{1}},您可以使用None

list.__iadd__也会将列表扩展到位,但之后会返回__iadd__

如果您厌恶使用特殊方法,可以使用list模块中的iadd

operator

答案 2 :(得分:1)

这是因为extend是一个不返回任何内容的函数,它只是就地更改列表。可能的解决方案是使用+代替:

return [(aList[0], lst[len(aList) - 1])] + compute(aList[1:len(aList) - 1])