zoukankan      html  css  js  c++  java
  • 列表推导式和生成器表达式

    列表推导式:

    # ----- 列表推导式 ----
    # 循环
    ls = [i for i in range(0,10)]
    # 筛选
    ls_2 = [i for i in range(0,100) if i%2 == 0]

    找到嵌套列表中名字含有两个‘e’的所有名字

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    # for lst in names     for name in lst 最终要的是name 
    print([name for lst in names for name in lst if name.count('e') >=2])

    字典推导式

    将一个字典的key和value对调:

    mcase = {'a': 10, 'b': 34}
    dic = {mcase[k]:k for k in mcase}
    print(dic)

    集合推导式

    计算列表中每个值的平方,自动去重

    squared = {x**2 for x in [1,-1,2]}

    生成器表达式

    1、把列表解析的[]换成()得到的就是生成器表达式。

    2、列表解析和生成器表达式都是一种便利的变成方式,只不过生成器表达式更节省内存。

    3、Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。所以,我们可以直接这样计算一系列值得和:

    sum(x ** 2 for x in range(4,8))
    生成器表达式背后遵守了迭代器协议,可以逐个的产出元素,可以节省内存,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。
  • 相关阅读:
    AIBigKaldi(二)| Kaldi的I/O机制(源码解析)
    OfficialKaldi(十四)| 从命令行角度来看Kaldi的 I / O
    GNU Make函数、变量、指令
    C/C++编码规范(google)
    [English]precede, be preceded by
    视频压缩技术、I帧、P帧、B帧
    SMB
    printf占位符
    使用 Yocto Project 构建自定义嵌入式 Linux 发行版
    gcc fpic fPIC
  • 原文地址:https://www.cnblogs.com/liangying666/p/9204019.html
Copyright © 2011-2022 走看看