zoukankan      html  css  js  c++  java
  • [ python ] 各种推导式

    各种推导式,主要使用示例演示用法

     列表生成式

    示例1:求0-9每个数的平方

    li = [x*x for x in range(10)]
    print(li)
    
    # 执行结果:
    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

     列表生成式,使用[],括号内是for循环语句

    示例2:求0-9能被3整除的数字

    li = [x for x in range(10) if x % 3 == 0]
    print(li)
    
    # 执行结果:
    # [0, 3, 6, 9]
    

    在这个列表生成式中,不断有for循环,而且还用到了if判断语句

    列表生成式的格式:
        (1)[元素 for 元素 in 可迭代的类型 ]
        (2)[元素 for 元素 in 可迭代的类型 if 元素需要满足的条件]

     生成器表达式

    还是上面两个例子,使用生成器表达式写出来:

    示例1:求0-9每个数的平方

    g = (x for x in range(10) if x % 3 == 0)
    
    print(g)    # generator 这里的g就是一个生成器了,将中括号换成小括号就变成了生成器表达式
    
    for i in g:
        print(i)
    
    # 执行结果:
    # <generator object <genexpr> at 0x00000194C9FA34C0>
    # 0
    # 3
    # 6
    # 9
    

    示例2:求0-9能被3整除的数字

    g = (x for x in range(10) if x % 3 == 0)
    
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    
    # 执行结果:
    # 0
    # 3
    # 6
    # 9
    

    列表生成式和生成器表达式总结:
        1. 把列表生成式的中括号换成小括号就是生成器表达式
        2. 列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

    示例3:找到嵌套列表中名字含有两个'e'的所有名字

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    
    # for name in names:
    #     for i in name:
    #         if i.count('e') == 2:
    #             print(i)
    
    # 如果无法一次写出嵌套的列表生成式,可以先使用for循环写出来
    list_name = [x for name in names for x in name if x.count('e') == 2]
    print(list_name)
    
    # 执行结果:
    # ['Jefferson', 'Wesley', 'Steven', 'Jennifer']
    

     字典推导式

    示例1:将字典中的key和value对调

    # 注意字典推导式中,返回的一定是一个字典类型:mcase[i]:i
    dic = {mcase[i]:i for i in mcase}
    print(dic)
    
    # 执行结果:
    # {10: 'a', 34: 'b'}
    

    示例2:合并大小写对应的value值,将k统一成小写

    mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
    
    dic = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}
    print(dic)
    
    # 执行结果:
    # {'a': 17, 'b': 34, 'z': 3}
    
    # 这个示例中用到了 get() 这个知识点:
    #     mcase.get(k.lower(), 0) 当字典mcase中存在k.lower()的时候则直接返回,否则返回默认填写的0
    

     集合推导式

    集合数据类型,有自带的去重功能
    
    squared = {x**2 for x in [1, -1, 2]} # 返回 1, 1, 2 集合自带去重的功能
    
    print(squared)
    
    # 执行结果:
    # {1, 4}
    

    其他一些示例:

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

    li = ['a', 'abc', 'c', 'dddd']
    
    l1 = [i.upper() for i in li if len(i) >= 3]
    print(l1)
    

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

    l1 = [(x, y) for x in range(1, 5) if x%2==0 for y in range(1, 5) if y%3==0]
    print(l1)
    

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

    M = [[1,2,3],[4,5,6],[7,8,9]]
    l1 = [i[2] for i in M]
    print(l1)
    
  • 相关阅读:
    delphi string.split 按照任意字符串分割语句
    学习 TTreeView [16]
    学习 TTreeView [15]
    delphi TClientDatset资料
    delphi7 clientdataset 详解
    为TMenuItem增加指针Data属性
    构建一个用于产品介绍的WEB应用
    图片延迟加载技术-Lazyload的应用
    你想不到的压缩方法:将javascript文件压缩成PNG图像存储
    如何更快速加载你的JS页面
  • 原文地址:https://www.cnblogs.com/hukey/p/9710027.html
Copyright © 2011-2022 走看看