• 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基础教程》 人民邮电出版社

  • 相关阅读:
    《构建之法》第四章的感悟
    单复利软件单元测试
    实验一 操作系统模仿cmd
    <构建之法>第一二三章感悟
    近期工作量统计
    复利计算3.0
    复利运算
    单利运算1
    复利计算6.0
    汉堡包
  • 原文地址:https://www.cnblogs.com/mess4u/p/3853413.html
Copyright © 2020-2023  润新知