• 列表推导式----生成器表达式


    列表推导式:

      基本形式: [表达式  for  参数  in  可迭代对象]   或者 [表达式  for  参数  in  可迭代对象  if   条件]

      实例:

     1 l = []
     2 for i in range(100):
     3     l.append('egg%s' %i)
     4 print i
     5 
     6 #不带if条件
     7     l = ['agg%s' %i for i in range(100) ]
     8 
     9 #带if条件
    10     l = ['agg%s' %i for i in range(100)  if i>10]

    生成器表达式

      将列表推导式的中括号改为小括号即可

      l = ('egg%s' %i  for i in range(100)  if i>10)

      print(next(l))

      注意:得到的结果为迭代器

     1 # 1、将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写
     2 # names=['egon','alex_sb','wupeiqi','yuanhao']
     3 # names = [name.upper() for name in names]
     4 # print(names)
     5 
     6 
     7 #
     8 # 2、将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度
     9 # res=[len(i) for i in names if not i.endswith('sb')]
    10 # print(list(res))
    11 # 3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
    12 # with open('a.txt','r',encoding='utf-8') as f:
    13 #     res = max([len(line) for line in f])
    14 #     print(res)
    15 
    16 #如果数据量过大,使用生成器表达式更为恰当
    17 # with open('a.txt', 'r', encoding='utf-8') as f:
    18 #     res = max(len(line) for line in f)   #生成器表达式的小括号与max的小括号可以和为一个
    19 #     print(res)
    20 
    21 # 4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
    22 # with open('a.txt','r',encoding='utf-8') as f:
    23 #     res = sum(len(line) for line in f)
    24 #     print(res)
    25 # 第一次求和之后,文件光标已经移到末尾,再次求和没有内容可以循环出来
    with open('a.txt') as f:
        g=(len(line) for line in f)
    print(sum(g)) #为何报错?
    
    
    #g是一个生成器对象,不知直接求和,必须取值之后才能求和

    6、文件shopping.txt内容如下

    mac,20000,3
    lenovo,3000,10
    tesla,1000000,10
    chicken,200,1

    求总共花了多少钱?

    打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]

    求单价大于10000的商品信息,格式同上

    # with open('a.txt','r',encoding='utf-8') as f:
    #     info = [line.split(',') for line in f]
    #     cost=sum(int(price) * int(count) for *_,price,count in info)
    #     print(cost)
    
    # with open('a.txt','r',encoding='utf-8') as f:
    #     info=[{'name':line.split(',')[0],
    #       'price':int(line.split(',')[1]),
    #       'count':int(line.split(',')[2])}
    #         for line in f]
    #     print(info)
    
    
    # with open('a.txt',encoding='utf-8') as f:
    #     info=[{
    #         'name': line.split()[0],
    #         'price': float(line.split()[1]),
    #         'count': int(line.split()[2]),
    #     } for line in f if float(line.split()[1]) > 10000]
    #     print(info)

         

  • 相关阅读:
    前路漫长
    OEL6 /boot分区删除恢复
    区块链:剖析工作量证明
    【转】区块链:Schnoor签名究竟是什么
    使用 Hyperledger Fabric 开展私密交易
    Sovrin:技术落地可期,但推广难度较高
    白硕:区块链技术与数据隐私(附视频)
    从入门到精通零知识证明与zkSNARK
    区块链安全:匿名性以及隐私性
    朋友去面试Python工程师,又带回来几道基础题,Python面试题No10
  • 原文地址:https://www.cnblogs.com/guodengjian/p/8708621.html
Copyright © 2020-2023  润新知