我创建了一个函数,可以将嵌套列表展平为普通列表。你知道吗
outputarray = []
def flattenarray(x):
for elmt in x:
if isinstance(elmt, float) or isinstance(elmt, int):
outputarray.append(elmt)
elif isinstance(elmt, list):
flattenarray(elmt)
return outputarray
上面的方法工作得很好,但是我试图在函数中包含“outputarray”变量,但是当我这样做时,递归步骤会将outputarray列表覆盖回空列表。你知道吗
我怎样才能在函数中指定一个列表,同时又能在递归过程中附加到它而不覆盖它呢?你知道吗
您可以使用递归函数调用的返回值来扩展输出,而不是尝试插入全局变量:
这会创建比严格必要的更多的临时列表,因此效率不高。另一方面,它和原始代码一样容易阅读。你知道吗
另一方面,我建议对您的代码进行泛化。不必检查三种特定类型并跳过其他所有类型,只需检查元素是否可iterable:
全局变量:
这与单线功能完美配合,基本思想与wim相同:
结果:
您需要从函数中创建输出数组。一种方法是在递归步骤中传递输出容器:
一个更具python风格的方法是让压扁器一个接一个地产生物品。请注意,
isinstance
可以接受类型的元组,因此只需调用它一次。你知道吗一个更正确的实现:
相关问题 更多 >
编程相关推荐