我搜索后发现标题相同的问题也是(hereherehereherehere),但我没有问这个问题。我遇到了一个问题:
编写一个使列表变平的函数。该列表包含其他列表、字符串或整数。在
我的密码是
t=[]
def flatten(aList):
for i in aList:
if type(i) !=list:
t.append(i)
else:
flatten(i)
return t
但是当我检查测试用例的代码时:
flatten([[1], [1]])
:检查器告诉我输出是[1, 1, 1, 1]
,但是在codeskulptor中我得到了正确的输出[1, 1]
。在flatten([[[1]], [[[5]]]])
:检查器告诉输出是[1, 1, 1, 1, 1, 2, 3, 3, 2, 1, 0, 4, 5, 6, 7, 1, 5]
,但在codeskulptor中却告诉[1, 5]
。在这个问题存在于许多测试用例中。
然后我检查了python tutor中的代码,发现在每次执行if语句之后,list t
返回,最后当函数停止时,它返回最后编辑的列表t
。在
如何解决这个问题请帮助我解决这个问题,是的,我是python新手,对itertools、lambda函数的用法、生成器等一无所知,所以请告诉我在什么情况下我可以理解。在
您的代码依赖于全局;如果检查器调用函数两次,它将收到比预期更长的列表:
不要使用全局变量。使用本地列表,并使用递归调用的结果对其进行扩展:
^{pr2}$注意,我切换到使用
isinstance()
来测试类型。此版本不会在下一个调用中出现共享状态泄漏:相关问题 更多 >
编程相关推荐