zoukankan      html  css  js  c++  java
  • Python-02 生成器表达式,列表推导式

    列表推导式和生成器表达式

    列表推导式,生成器表达式
    1,列表推导式比较直观,占内存
    2,生成器表达式不容易看出内容,省内存.

    [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表的推导式, 循环模式
    [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 if 条件] 列表的推导式, 筛选模式

    1.[变量(加工后的变量) for 变量 in iterable] 循环模式

    l = [i for i in range(10)]
    print(l)
    l1 = ['选项%s'%i for i in range(10)]
    print(l1)
    l3 = [ 'python%s期' % i for i in range(1, 14)]
    # print(l3)

       优点:
      1,节省代码,一行搞定.
       2,看着高大上.
       缺点:
       不好排错.

    整体:
     凡是用列表推导式构造的列表对象,用其他方式都可构建.,非常复杂的列表,列表推导式是构建不出的,

    2.[变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式

    l1 = [i for i in range(1, 31) if i % 3 == 0]
    # print(l1)
    # 10以内所有数的平方
    # print([i*i for i in range(11)])
    # 30以内所有能被3整除的数的平方
    # print([i**2 for i in range(31) if i % 3 == 0])
    # 100 以内所有的奇数.
    # print([i for i in range(1,101,2)])
    # print([i for i in range(101) if i % 2 == 1])
    

      生成器表达式:

    g_obj = ('python%s期' % i for i in range(1,14)) # 循环模式
    g_obj1 = ('python%s期' % i for i in range(1,14) if i % 2 == 0) # 筛选模式
    # print(g_obj)
    # print(g_obj.__next__())
    # print(g_obj.__next__())
    # print(g_obj.__next__())
    # print(g_obj.__next__())
    # for i in g_obj1:
    #     print(i)

      生成器:两种方式:
         生成器函数. yield
         生成器表达式
       为什么有生成器:
      生成器本身是自己用python代码构建的,这样就满足了个性化需求,满足以后你工作中需要.

    列表推导式

    例一:30以内所有能被3整除的数

    multiples = [i for i in range(30) if i % 3 is 0]
    print(multiples)
    # Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

    例二:30以内所有能被3整除的数的平方

    def squared(x):
        return x*x
    multiples = [squared(i) for i in range(30) if i % 3 is 0]
    print(multiples)

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

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

    print([name for lst in names for name in lst if name.count('e') >= 2])  # 注意遍历顺序,这是实现的关键
     

     字典推导式

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

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

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

    mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
    mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys()}
    print(mcase_frequency)
    

      

    集合推导式

    例:计算列表中每个值的平方,自带去重功能

    squared = {x**2 for x in [1, -1, 2]}
    print(squared)
    # Output: set([1, 4])
    

      

  • 相关阅读:
    textare限制拖动;提示文字(点击消失,不输入恢复提示信息)
    JSON整理
    Bootstrap-模态框 modal.js
    input自动填入密码以后变成白色和黄色的解决办法
    Bootstrap-按钮篇btn
    jquery关于Select元素的操作
    数据库外键
    数据库一些操作
    爬虫日记-代理
    爬虫日记-模拟登录cookie操作
  • 原文地址:https://www.cnblogs.com/liuye1990/p/9203751.html
Copyright © 2011-2022 走看看