zoukankan      html  css  js  c++  java
  • 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基础教程》 人民邮电出版社

  • 相关阅读:
    命令执行顺序控制与管道
    js获取返回首页
    手机站点击商务通无轨迹解决方法
    js文字向上滚动代码
    文字隐藏多余的文字
    QQ弹窗代码
    百度推送代码
    js手机站跳转
    js 判断时间,满足执行框架
    js切换换class
  • 原文地址:https://www.cnblogs.com/mess4u/p/3853413.html
Copyright © 2011-2022 走看看