python - 为什么扁平化列表中的项目为空白

标签 python python-3.x list recursion flatten

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

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

为什么每个子列表都得到 [...] 以及如何避免得到这个?感谢您的帮助。

最佳答案

现有答案很好地解释了为什么会出现 [...] 自引用,但他们对代码的建议修改对解决 default mutable argument gotcha 没有任何作用。它正等着咬你呢。

这是一个不需要 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]]))

关于python - 为什么扁平化列表中的项目为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579110/

相关文章:

python - 同时将 Pandas 函数应用于行和列以进行置信区间计算

python - 为什么我的 pygame Sprite 左边比右边快?

list - 在 Haskell 中索引列表时捕获异常

python - python中确保字符串适合作为文件名的优雅方式?

python - Python 的 PEP8 行长度限制是否适用于注释?

python-3.x - 使用 SAS token 将文件从 Amazon AWS s3 传输到 Azure Blob 的 python 脚本

django - 如何在我的 Django 博客中添加类别

list - Erlang打印2列表

c - 尝试 malloc 时具有特定输出的 Valgrind 泄漏和段错误

python - Python + SQlite3,使用外键