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

     
    #用普通方法实现打印1-10的数,引出列表推导式.
    l1 = []
    for i in range(11):
        l1.append('python班%s' % i)
    print(l1)
     
    列表推导式和生成器表达式
    列表推导式:
    li = [i for i in range(1,12)]
    print(li)
     
    #一行搞定,列表推导式:用列表推导式能够构建的任何列表,用别的都可以构建.
    # 因为,一行,感觉高级,但不易排错
     
     
    生成器表达式:
    l_obj = ('python%s' % i for i in range(1,12))
    # print(l_obj) #这样打印是看不出来的,因为是生成器,
    print(l_obj.__next__())
    print(l_obj.__next__())
    print(l_obj.__next__())
    print(l_obj.__next__())
     
    俩者之间的区别:
    生成器表达式:不易看出,节省内存,写法是()
    列表推导式:一目了然,占内存,写法是[],所以建议多联系用列表推导式
     
     
     
    列表推导式和生成器表达式的规定模式,写法
    1.循环模式;
    #[经过加工的i for i in 可迭代对象]
    li1 = ['python%s' % i for i in range(1,12)]  # 排错看不出来
    print(li1)
     
     
    2.筛选模式:
    [经过加工的i for i in 可迭代对象 if 条件 筛选]
    l2 = [i for i in range(1,101) if i % 3 == 0]
    print(l2)
     
     
     
     
    问题: 计算嵌套列表中,元素包含俩个e的,给打印出来
    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
     
     
    l5 = [name for i in names for name in i if name.count('e') == 2]
    print(l5)
     
    列表推导式最多不超过三个循环,判断只能用一个
     
    字典推导式
    mcase = {'a': 10, 'b': 34}
    mcase_frequency = {mcase[k]: k for k in mcase}
    print(mcase_frequency)
     
    集合推导式
    例题:计算列表中每个值的平方,自带其中功能
     
    squared = list({x**2 for x in [1, -1, 2]}) #求这个列表里面的平方,去重,然后又转换为一个列表
    print(squared)
    返回:[1
  • 相关阅读:
    第十三周时间进度表
    第十二周时间进度表
    第十周时间进度表
    elasticsearch(ES)日志迁移
    docker stack 部署nginx
    docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)
    docker stack 部署 mysql 5.6
    docker stack 部署 filebeat
    docker stack 部署 redis
    docker stack 部署 seafile(http)
  • 原文地址:https://www.cnblogs.com/sunny7/p/9222502.html
Copyright © 2011-2022 走看看