Python成长之路——列表推导式和生成器表达式

闲话就不多说了,直接上代码吧

  • 列表解析
    v_list = [ "获取到第 %s 个元素"%i for i in range(10)]
    print(v_list)
    // 执行的结果  ['获取到第 0 个元素', '获取到第 1 个元素', '获取到第 2 个元素', '获取到第 3 个元素', '获取到第 4 个元素', '获取到第 5 个元素', '获取到第 6 个元素', '获取到第 7 个元素', '获取到第 8 个元素', '获取到第 9 个元素']
    
  • 生成器表达式
    v_list = ( "获取到第 %s 个元素"%i for i in range(10))
    print(v_list)
    // 执行的结果  ['获取到第 0 个元素', '获取到第 1 个元素', '获取到第 2 个元素', '获取到第 3 个元素', '获取到第 4 个元素', '获取到第 5 个元素', '获取到第 6 个元素', '获取到第 7 个元素', '获取到第 8 个元素', '获取到第 9 个元素']
    
  • 总结下:
  1. 把列表解析的[]换成()达到的就是生成器表达式
  2. 列表解析与生成器表达式都是一种便利的编程方式,只不过是生成器表达式更节省内存
  3. python不但使用迭代器协议,让for循环更加通用,大部分内置函数,也是使用迭代器协议访问对象
  • 推导式公式
    上面我们已经简单介绍了列表推导式和生成器表达式,除此之外,还有字典推导式,集合推导式等等
    下面以列表推导式来介绍通过公式,其他的推导式对于这个公式也是适用的
    variable = [out_exp_res for out_exp in input_list if out_exp == 2]
    out_exp_res:  列表生成元素表达式,可以是有返回值的函数。
    for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中。
    if out_exp == 2:  根据条件过滤哪些值可以。
    
  • 列表推导式
    30以内所有能被4整除的数
    list = [i for i in range(30) if i % 4 is 0]
    print(list)
    //执行结果 [0, 4, 8, 12, 16, 20, 24, 28]
    
    30以内所有能被3整除的数的平方
    list = [i ** 2 for i in range(30) if i % 4 is 0]
    print(list)
    //执行结果 [0, 16, 64, 144, 256, 400, 576, 784]
    
    找到嵌套列表中名字含有两个‘e’的所有名字
    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
         ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    list = [name for lst in names for name in lst if name.count('e') >= 2]
    print(list)
    // 执行的结果 ['Jefferson', 'Wesley', 'Steven', 'Jennifer']
    
  • 字典推导式
    将一个字典的key和value对调
    param = {"a":10,"b":20}
    list = {param[key]:key for key in param}
    print(list)
    //执行结果 {10: 'a', 20: 'b'}
    
  • 集合推导式
    计算列表中每个值的平方,并自带去重功能
    list = {i ** 2 for i in [1,-1,2,-2,8,6,5]}
    print(list)
    //执行结果 {64, 1, 4, 36, 25}
    

猜你喜欢

转载自blog.csdn.net/changqi008/article/details/89015717