python yield

描述:遍历数据,数据为数字或者由数字填充的列表

不使用生成器

1 data = [[1, 2], [3, 2], [5]]
2 
3 for lst in data:
4     for item in lst:
5         print item

使用生成器

1 data = [[1, 2], [3, 2], [5]]
2 
3 def flatten(nested):
4     for lst in nested:
5         for element in lst:
6             yield element
7 
8 for item in flatten(data):
9     print item

这里是直接打印,但是如果需要得到一个一维的列表作为结果,不使用生成器需要一个在循环内随时可以写的 [] 来每次append,而使用生成器则直接list(flatten(data))

 

如果嵌套的层数不定

使用生成器

 1 data_1 = [1, 3]
 2 data_2 = [[3, 1], [4, 1]]
 3 data_3 = [1, 2]
 4 
 5 data = [data_1, data_2, data_3]
 6 
 7 def flatten(nested):
 8     try:
 9         for lst in nested:
10             for item in flatten(lst):
11                 yield item
12     except:
13         yield nested
14 
15 for item in flatten(data):
16    print item

 不使用生成器

 1 data_1 = [1, 3]
 2 data_2 = [[3, 1], [4, 1]]
 3 data_3 = [1, 2]
 4 
 5 data = [data_1, data_2, data_3]
 6 
 7 def foo(data):
 8     for item in data:
 9         if type(item) is type(1):
10             print item,
11         else:
12             foo(item)
13 
14 foo(data)

参考:《python基础教程》 人民邮电出版社

posted @ 2014-07-18 14:13  mess4u  阅读(177)  评论(0编辑  收藏  举报