我在 Python 中尝试使用生成器玩耍,并尝试利用简单的递归方案来实现flatten函数。即,一个接受可能包含子列表的列表作为输入,并输出只迭代输入的原子元素的可迭代对象的函数。
所以,print(list(flatten([1,2,3,[4,5,6]])))应该返回包含[1,2,3,4,5,6]的东西。
我的尝试如下:
因此,它应该检查其参数是否为可迭代对象。如果是这种情况,则还要对此对象进行递归。否则,将其作为单个元素产生。
这并不起作用,flatten([1,2,3,[4,5,6]])仅返回一个空列表。
为什么会这样呢?特别是,为什么它甚至没有在此输入上执行递归函数调用?(我正在使用Python 3.5)
所以,print(list(flatten([1,2,3,[4,5,6]])))应该返回包含[1,2,3,4,5,6]的东西。
我的尝试如下:
def flatten(toflatten):
try:
for element in toflatten:
flatten(element)
except TypeError:
yield toflatten
因此,它应该检查其参数是否为可迭代对象。如果是这种情况,则还要对此对象进行递归。否则,将其作为单个元素产生。
这并不起作用,flatten([1,2,3,[4,5,6]])仅返回一个空列表。
为什么会这样呢?特别是,为什么它甚至没有在此输入上执行递归函数调用?(我正在使用Python 3.5)
flatten(element)
做什么?这行代码既不返回/生成任何内容,也不改变任何数据结构,因此它是无意义的。 - timgebsum(yourlist,[])
来展平您的列表。我建议在最后返回您的列表。 - Tomos Williamsfoo(x): return 2*x
。为什么你会期望一个只包含foo(x)
的行是有用的呢?输入参数没有被改变,而且你也没有使用结果。 - timgeb