• python 生成器和生成器表达式


    1.生成器

      生成器的本质就是迭代器

      生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值)

      生成器一般由生成器函数或者生成器表达式来创建

      其实就是手写的迭代器

    2.生成函数

      和普通函数没有区别.里面有yield的函数就是生成器函数.

      生成器函数在执行的时候.默认不会执行函数题.返回生成器

      通过生成器的__next__()分段执行这个函数.

      send()给上一个yield传值,不能再开头(没有上一个yield),最后一个yield也不可以用send()

    3.推导式

      1.列表推导式[结果 for循环 条件筛选]

      2.字典推导式{k:v for循环 条件筛选}

      3.集合推导式{k for循环 条件}

    4.生成器表达式

      (结果 for循环 条件)

      特点:

        1.情性机制

        2.只能向前

        3.节省内存(鸡蛋)

    1,用列表推导式做下列小题

      (1) 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母

      (2) 求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

      (3) 求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

      (4) 求出50以内能被3整除的数的平方,并放入到一个列表中。

      (5) 构建一个列表:['python1期', 'python2期', 'python3期', 'python4期', 'python6期', 'python7期',   'python8期', 'python9期', 'python10期']

      (6) 构建一个列表:[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

      (7) 构建一个列表:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

     (8) 有一个列表l1 = ['alex', 'WuSir', '老男孩', '太白']将其构造成这种列表['alex0', 'WuSir1', '老男孩2', '太白3']

      (9)有以下数据类型:

      x = {
          'name':'alex',
          'Values':[{'timestamp':1517991992.94,
               'values':100,},
                 {'timestamp': 1517992000.94,
              'values': 200,},
              {'timestamp': 1517992014.94,
               'values': 300,},
              {'timestamp': 1517992744.94,
               'values': 350},
              {'timestamp': 1517992800.94,
                  'values': 280}
                  ],}

    将上面的数据通过列表推导式转换成下面的类型:[[1517991992.94, 100], [1517992000.94, 200], [1517992014.94, 300], [1517992744.94, 350], [1517992800.94, 280]]

    # 1
    # (1)
    lst = ['a','qwer','zxcv','12','JQK']
    li = [i for i in lst if len(i) >= 3]
    print(li)
    
    # (2)
    lst = [(x,y) for x in range(6) for y in range(6) if x % 2 ==0 and y % 2 ==1]
    print(lst)
    
    # (3)
    M = [[1,2,3],[4,5,6],[7,8,9]]
    lst = [i[2] for i in M]
    print(lst)
    
    # (4)
    li = [i**2 for i in range(51) if i % 3 ==0]
    print(li)
    
    # (5)
    lst = ["python"+str(num) for num in range(1,11)]
    print(lst)
    
    # (6)
    li = [(x,x+1) for x in range(6)]
    print(li)
    
    # (7)
    lst = [i for i in range(19) if i % 2 ==0]
    print(lst)
    
    # (8)
    l1 = ['alex', 'WuSir', '老男孩', '太白']
    l2 = [l1[i]+str(i) for i in range(4)]
    print(l2)
    
    # (9)
    x = {
        'name':'alex',
        'Values':[{'timestamp':1517991992.94,
             'values':100,},
            {'timestamp': 1517992000.94,
            'values': 200,},
            {'timestamp': 1517992014.94,
             'values': 300,},
            {'timestamp': 1517992744.94,
             'values': 350},
            {'timestamp': 1517992800.94,
             'values': 280}
            ],}
    li = [j for i in x["Values"] for j in i.values()]
    print(li)
  • 相关阅读:
    线段树节点到底开多大
    HDU4901 The Romantic Hero DP
    VIM 配置文件可执行命令
    codeforces159D
    codeforces416B
    codeforces165C
    codeforces332B
    Node.js权威指南 (9)
    iOS-android-windowsphone等移动终端平台开发流程图
    前端面试题细节问题
  • 原文地址:https://www.cnblogs.com/zbw582922417/p/9468155.html
Copyright © 2020-2023  润新知