首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

关于递归跟生成器的

2013-01-02 
关于递归和生成器的def genflatten(lists):for s in lists:if isinstance(s,list):for item in genflatten

关于递归和生成器的



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
=================
这种错误提示已经很明显了:变量的作用域问题,

[解决办法]
引用:
def genflatten(lists):
  for s in lists:
  if isinstance(s,list):
  for item in genflatten(s):
  yield item
  else:
  yield s
q=[[1,2,3],[4,5,[5,6]],[7,8,9]]
print list(genflatten(q))

这是我修改……

for item in genflatten(sub_lists):
这一句执行之后,递归调用genflatten之后,原本的列表可能已经变成列表的元素,不是列表了
这样就执行    else:
        yield lists
,输出这个元素
========================
为什么一楼的代码这么整齐?
在发帖的时候,点击回复编辑框的“插入源代码”,选择语言,,把代码放到
两个括号中间 

热点排行