列表生成式和生成器表达式
一.列表生成式
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'}
[]

浙公网安备 33010602011771号