列表解析与生成器表达式
列表推导式:
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)
在一个列表中 [ ] ,将for的循环写在列表的右侧。[ for i in rang(100) ] ,将for循环的子代码写在左边, [ 'num%s' %i for i in rang(100) ]。就是列表推导式的写法。
在列表里也是可以加 if 判断的。
列表推导式的语法:
[ expression for item1 in iterable1 if condition1
for item2 in iterable2 if condition2
...
for itemN in iterableN if conditionN
]
类似于:
res = [ ]
for item1 in iterable1:
if condition1:
for item2 in iterable2:
if condition2:
...
for itemN in iterableN:
if conditionN:
res.append(expression)
优点:方便,改变了编程习惯。是声明式编程。
用处:
l=[1,2,3,4] s='hello' # # l1=[(num,s1) for num in l if num > 2 for s1 in s] # print(l1) # l1=[] # for num in l: # for s1 in s: # t=(num,s1) # l1.append(t) # print(l1)
# import os # g=os.walk('C:\George') # file_path_list=[] # for i in g: # # print(i) # for j in i[-1]: # file_path_list.append('%s\%s' %(i[0],j)) # # print(file_path_list) # # g=os.walk('C:\George') # l1=['%s\%s' %(i[0],j) for i in g for j in i[-1]] # print(l1)
生成器表达式:
将列表的 [ ] 换为( )。即可用next,一次一个的取出下一个值。
# # l=['egg%s' %i for i in range(100)] # print(l) # g=l=('egg%s' %i for i in range(1000000000000000000000000000000000000)) # print(g) # print(next(g)) # print(next(g)) # for i in g: # print(i)
生成器表达式的语法:
与列表推导式的区别在于一个是 [ ] ,一个是( )。
( expression for item1 in iterable1 if condition1
for item2 in iterable2 if condition2
...
for itemN in iterableN if conditionN
)
生成器表达式的优点: 省内存,一个只生产一个值在内存中。
生成器表达式的应用:读取一个大文件的所有内容。并且处理行。
f = open('a.txt') g = (line.strip() for line in f) #去除文件中的每一行的空格。 list(g) #因为g可以迭代。所以可以转成列表。
# f=open('a.txt') # l=[] # for line in f: # line=line.strip() #弊端,在用大量内存空间。 # l.append(line)
列表表达式和生成器表达式的作用:
用来进行声明是编程。
b.txt 文件
apple 10 3 tesla 1000000 1 mac 3000 2 lenovo 30000 3 chicken 10 3
计算b.txt 文件里的每一类的商品的总价钱。
# money_l=[] # with open('b.txt') as f: # for line in f: # goods=line.split() # res=float(goods[-1])*float(goods[-2]) # money_l.append(res) # print(money_l) # # f=open('b.txt') # g=(float(line.split()[-1])*float(line.split()[-2]) for line in f) # # print(sum(g)) # with open('b.txt') as f: # print(sum((float(line.split()[-1])*float(line.split()[-2]) for line in f)))
# with open('b.txt') as f: # res=(line.split() for line in f) # print(res) # dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res) # print(dic_g) # apple_dic=next(dic_g) # print(apple_dic['count']) # apple_dict=next(dic_g) # print(apple_dict)
#取出单价>10000 with open('b.txt') as f: res=(line.split() for line in f) # print(res) dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res if float(i[1]) > 10000) print(dic_g) print(list(dic_g)) # for i in dic_g: # print(i)