• 列表生成器 和 生成器表达式


    声明式编程风格
    列表生成器

    将一系列代码封装到一行,以列表的形式输出结果

    #用一个列表生成多个值
    l = []
    for i in range(100):
    l.append('%s'%i)
    print(l)

    l = ['egg%s'%i for i in range(100) if i > 50]
    print(l)

    #读取文件的绝对路径
    import os
    g = os.walk('F:\egon')
    file_path = []
    for i in g:
    for j in i[-1]:
    file_path.append('%s\%s'%(i[0],j))
    print(file_path)

    l=['%s\%s'%(i[0],j) for i in g for j in i[-1]]
    print(l)

    #添加条件
    l = [1,2,3,4]
    s = 'hello'
    l1 = []
    for num in l:
    for s1 in s:
    t = (num ,s1)
    l1.append(t)
    print(l1)

    l2 = [(num,s1) for num in l for s1 in s if num > 2]
    print(l2)


    #生成器表达式
    # #有时候程序的运行结果一个列表装不下,内存不够用,所以讲运行结果返回为一个生成器,一次返回一个结果
    import os
    g = os.walk('F:\')
    l=('%s\%s'%(i[0],j) for i in g for j in i[-1])
    print(next(l))
    print(type(l)) #l为生成器

    #求文件中商品总价
    money= []
    with open('a.txt') as f:
    for line in f:
    goods = line.split() #每一行变成列表
    money.append(float(goods[1])*float(goods[2]))
    print(sum(money))

    with open('a.txt') as f:
    l=(float(line.split()[1])*float(line.split()[2]) for line in f)
    print(sum(l)) #sum 可以对可迭代对象求和 内置了iter next函数,将可迭代对象变为迭代器再执行next函数

    #求文件中的每行变为一个字典放入一个列表中
    res = []
    with open('a.txt') as f:
    for line in f:
    l = line.split()
    d ={}
    d['name'] = l[0]
    d['price'] = l[1]
    d['count'] = l[2]
    res.append(d)
    print(res)



    with open('a.txt') as f:
    res = (line.split() for line in f) #生成器表达式返回了一个 可以返回字符串内容的 生成器
    dic_g = ({'name':i[0],'price':i[1],'count':i[2]} for i in res ) #返回字典内容的生成器
    apple_dic = next(dic_g)
    print(apple_dic['count'])

    with open('a.txt') as f:
    res = (line.split() for line in f)
    dic_g = ({'name':i[0],'price':i[1],'count':i[2]} for i in res if float(i[1]) > 10000)
    for j in dic_g:
    print(j)



    应用
    linux=['钢弹','小壁虎','小虎比','alex','wupeiqi','yuanhao']
    python=['dragon','钢弹','zhejiangF4','小虎比']
    #问题一:得出既报名linux又报名python的学生列表
    l1 = []
    for i in linux:
    for j in python:
    if i == j:
    l1.append(i)
    print(l1)

    l1 = [ i for i in linux for j in python if i == j]
    print(l1)
    #问题二:得出只报名linux,而没有报名python的学生列表
    l2 = []
    for i in linux:
    if i not in python:
    l2.append(i)
    print(l2)
    l2 = [i for i in linux if i not in python]
    #问题三:得出只报名python,而没有报名linux的学生列表
    l3 = []
    for i in python:
    if i not in linux:
    l3.append(i)
    print(l3)

    l3 = [i for i in python if i not in linux]


    shares={
    'IBM':36.6,
    'lenovo':27.3,
    'huawei':40.3,
    'oldboy':3.2,
    'ocean':20.1
    }

    #问题一:得出股票价格大于30的股票名字列表

    l = [i for i in shares if float(shares[i]) > 30]
    print(l)
    #问题二:求出所有股票的总价格
    l =sum([shares[i] for i in shares])
    print(l)

    l=[10,2,3,4,5,6,7]
    #得到一个新列表l1,新列表中每个元素是l中对应每个元素值的平方
    l = [i**2 for i in l]
    print(l)
    #过滤出l1中大于40的值,然后求和
    l = sum([i for i in l if i >40])
    print(l)


  • 相关阅读:
    Django REST framework
    django写入csv并发送邮件
    GC收集器ParNew&CMS
    编写高质量的JavaScript代码
    Vue3.0 declare it using the "emits" option警告
    vue 3.0 router 跳转动画
    vue3.0 element-plus 表格合并行
    element-plus 时间日期选择器 el-date-picker value-format 无效等
    vue3.0中使用,一个元素中是否包含某一个元素。
    vue axios ajax 获取后端流文件下载
  • 原文地址:https://www.cnblogs.com/liuguniang/p/6714956.html
Copyright © 2020-2023  润新知