我正在尝试使用递归函数来展平可能包含子列表项的已发送列表:
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/