【发布时间】:2019-12-07 11:40:30
【问题描述】:
我正在使用 python 来展平嵌套列表,例如[1,2,[3,4,[5,[[6,7]]]]],我想创建一个生成器,以便我可以使用 for 循环在嵌套列表中一一打印所有数字。但它并没有像我预期的那样工作。
当我将 'yield' 关键字替换为 'print' 时,数字会一一打印出来。但是这样一来,它就不再是生成器了。
以下无法正常工作:
from collections.abc import Iterable
def flatten(nested):
for item in nested:
if isinstance(item, Iterable):
flatten(item)
else:
yield item
x = [1,2,[3,4,[5,[[6,7]]]]]
y = flatten(x)
for element in y:
print(element)
但是,如果我编写如下代码,我将 yield 替换为
print,数字会正确打印出来
from collections.abc import Iterable
def flatten(nested):
for item in nested:
if isinstance(item, Iterable):
flatten(item)
else:
print(item)
x = [1,2,[3,4,[5,[[6,7]]]]]
y = flatten(x)
如果我写了'yield':
x = [[1,2],[3,4,[5,[[6,7]]]]]
y = flatten(x)
y.__next__()
错误消息将是y.__next__() StopIteration
【问题讨论】:
标签: python recursion generator yield iterable