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

    一.列表生成式

    egg_list=[]
    # for i in range(100):
    #     egg_list.append('egg%s' %i)
    # print(egg_list)
    
    l=[ 'egg%s' %i for i in range(100) if i >50]
    print(l)
    

    三元表达式:

    name='alex'
    name='linhaifeng'
    res='SB' if name == 'alex' else 'shuai'
    print(res)
    

     

    列表生成式例子:

    1.

    l=[1,2,3,4]
    s='hello'
    
    l1=[(num,s1) for num in l if num > 2 for s1 in s]
    print(l1)
    
    [(3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), (3, 'o'), (4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]
    

    相当于  

    l1=[]
    for num in l:
    for s1 in s:
    t=(num,s1)
    l1.append(t)
    print(l1)


    2.

    import os
    
    g=os.walk('C:\egon')
    l1=['%s\%s' %(i[0],j) for i in g for j in i[-1]]
    print(l1)
    
    #相当于
    # g=os.walk('C:\egon')
    # file_path_list=[]
    # for i in g:
    #     for j in i[-1]:
    #         file_path_list.append('%s\%s' %(i[0],j))
    #
    # print(file_path_list)
    
    
    
    
    
    
    
    ['C:\egon\egon.txt', 'C:\egon\egon1.txt', 'C:\egon\a\a.txt', 'C:\egon\a\a1\a1.txt', 'C:\egon\a\a1\a2\a2.txt', 'C:\egon\b\b.txt']
    

    二.生成器表达式

    g=l=('egg%s' %i for i in range(100))
    print(g)
    print(next(g))
    print(next(g))
    
    
    
    <generator object <genexpr> at 0x0000000000690E60>
    egg0
    egg1
    
    f=open('a.txt')           ##过于占用内存
    l=[]
    for line in f:
        line=line.strip()
        l.append(line)
    print(l)

    #或者
    l1=[line.strip() for line in f ] ##声明式编程
    print(l1)




    ['sfasdfasdf', '1234432', '343243', '324124', '3124124', '321441234']

      

    表达式形式

     1 money_l=[]
     2 with open('b.txt') as f:
     3     for line in f:
     4         goods=line.split()
     5         res=float(goods[-1])*float(goods[-2])
     6         money_l.append(res)
     7 print(money_l)
     8 
     9 
    10 
    11 
    12 [30.0, 1000000.0, 6000.0, 90000.0, 30.0]

    生成器形式

    f=open('b.txt')
    g=(float(line.split()[-1])*float(line.split()[-2]) for line in f)
    print(sum(g))
    
    
    
    #求和
    
    
    #b.txt
    apple 10 3
    tesla 1000000 1
    mac 3000 2
    lenovo 30000 3
    chicken 10 3
    
     1 res = []
     2 with open('b.txt') as f:
     3     for line in f:
     4         #print(line)
     5         l=line.split()
     6         #print(l)
     7         d={}
     8         d['name']=l[0]
     9         d['price']=l[1]
    10         d['count']=l[2]
    11         res.append(d)
    12 print(res)
    13 
    14 
    15 
    16 [{'name': 'apple', 'price': '10', 'count': '3'}, {'name': 'tesla', 'price': '1000000', 'count': '1'}, {'name': 'mac', 'price': '3000', 'count': '2'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}]

    模拟数据库的查询

     1 ##列表形式
     2 with open('b.txt') as f:
     3     res=[line.split() for line in f]
     4     print(res)
     5 
     6 
     7 [['apple', '10', '3'], ['tesla', '1000000', '1'], ['mac', '3000', '2'], ['lenovo', '30000', '3'], ['chicken', '10', '3']]
     8 
     9 ##生成器形式
    10 with open('b.txt') as f:
    11     res=(line.split() for line in f)
    12     print(res)
    13     dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res)
    14     print(dic_g)
    15     apple_dic=next(dic_g)
    16     print(next(dic_g))
    17     print(apple_dic['count'])
    18 
    19 
    20 <generator object <genexpr> at 0x0000000000B20E60>
    21 <generator object <genexpr> at 0x0000000000B20F68>
    22 {'price': '1000000', 'name': 'tesla', 'count': '1'}
    23 3

    过滤查询

    #取出单价>10000
    with open('b.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)
        print(dic_g)
        for i in dic_g:
            print(i)
        print(list(dic_g))
    
    
    
    <generator object <genexpr> at 0x0000000000D10EB8>
    {'count': '1', 'name': 'tesla', 'price': '1000000'}
    {'count': '3', 'name': 'lenovo', 'price': '30000'}
    []
    

      

      





  • 相关阅读:
    adb shell am force-stop <package>
    推荐一个代码生成工具:freemarker
    子控件跟着父控件变色
    sqlite支持的数据库类型
    android 资源文件
    一个手机基础信息的获取代码
    二维码的开源项目
    在点击HOME键时, 在点击icon回到原来的应用。
    Wireshark "The NPF driver isn’t running…"
    .atomic vs volatile
  • 原文地址:https://www.cnblogs.com/jiangshitong/p/6700919.html
Copyright © 2011-2022 走看看