我正在尝试使用以下递归函数来展平可能包含子列表项的已发送列表:

def myflatten(slist, outlist=[]):
    for sl in slist:
        if type(sl) == list:
            outlist.append(myflatten(sl, outlist))
        else:
            outlist.append(sl)
    return outlist

print("myflatten list=", myflatten([1,[5,6,7],3,4,[7,8,9]]))

输出:
myflatten list= [1, 5, 6, 7, [...], 3, 4, 7, 8, 9, [...]]

为什么每个子列表我都会得到[...],我如何才能避免得到这个?谢谢你的帮助。

最佳答案

现有的答案提供了很好的解释为什么……自我引用发生,但是他们对代码的修改建议没有做任何事情来解决“AA>正在等待咬你。”
这里有一个不需要outlist参数的解决方案:

def myflatten(slist):
    outlist = []
    for sl in slist:
        if isinstance(sl, list):
            outlist.extend(myflatten(sl))
        else:
            outlist.append(sl)
    return outlist

print("myflatten list=", myflatten([1,[5,6,7],3,4,[7,8,9]]))

10-07 20:24