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

一.列表生成式

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'}
[]

  

  

 

 





posted @ 2017-04-12 19:27  samyoung  阅读(2508)  评论(0编辑  收藏  举报