【发布时间】:2011-03-15 12:45:46
【问题描述】:
我正在做一个练习来展平嵌套列表。该代码在控制台中有效,但在文件中时无效。我不知道是怎么回事。 :(
def flatten(nested):
"""
>>> flatten([2, 9, [2, 1, 13, 2], 8, [2, 6]])
[2, 9, 2, 1, 13, 2, 8, 2, 6]
>>> flatten([[9, [7, 1, 13, 2], 8], [7, 6]])
[9, 7, 1, 13, 2, 8, 7, 6]
>>> flatten([[9, [7, 1, 13, 2], 8], [2, 6]])
[9, 7, 1, 13, 2, 8, 2, 6]
>>> flatten([[5, [5, [1, 5], 5], 5], [5, 6]])
[5, 5, 1, 5, 5, 5, 5, 6]
"""
simple = []
for x in nested:
if type(x) == type([]):
for y in x:
simple.append(y)
else:
simple.append(x)
return simple
if __name__ == '__main__':
import doctest
doctest.testmod()
我首先尝试递归解决这个练习,但决定先尝试迭代。
edit:在文件中执行时,它只打印出原始函数参数 TIA
【问题讨论】:
-
您是否遇到特定错误,“不起作用”是什么意思?
-
您发布的缩进没有意义。请仔细检查函数体是否实际缩进。
-
我第一眼看到你的迭代解决方案被破坏了。我建议你用这个
[[[[[[[[[[[[[[[[1]]]]]]]]]]]]]]],2](输出:[1,2])测试你写的任何函数 -
@centr0,您的代码混合了制表符和空格(在编写 Python 时这是一个坏主意,在编写 SO 问题时显然不好) - 我用 8 个空格替换了制表符。你的代码是这样的吗?
-
@Nick T:稍微不那么小气:我记得,首选的方法是使用
isinstance(obj, class_or_type)而不是type(x) == typename,因为isinstance也会返回True,如果object 是给定类/类型的子类的实例,这通常是所需的行为。此外,基于您可以使用类/类型的元组而不是单个元组这一事实,它似乎更强大。