关于递归和生成器的
def genflatten(lists):
for s in lists:
if isinstance(s,list):
for item in genflatten(s):
yield item
else:
yield item
q=[[1,2,3],[4,5,[5,6]],[7,8,9]]
list(genflatten(q))
运行后出现错误 UnboundLocalError: local variable 'item' referenced before assignment
求解
[解决办法]
好烂的递归, 这样:
def genflatten(lists):
if isinstance(lists, list):
for sub_lists in lists:
for item in genflatten(sub_lists):
yield item
else:
yield lists
q = [[1, 2, 3], [4, 5, [5, 6]], [7, 8, 9]]
print(list(genflatten(q)))
[解决办法]
UnboundLocalError: local variable 'item' referenced before assignment
=================
这种错误提示已经很明显了:变量的作用域问题,
[解决办法]
for item in genflatten(sub_lists):
这一句执行之后,递归调用genflatten之后,原本的列表可能已经变成列表的元素,不是列表了
这样就执行 else:
yield lists
,输出这个元素
========================
为什么一楼的代码这么整齐?
在发帖的时候,点击回复编辑框的“插入源代码”,选择语言,,把代码放到两个括号中间