列表生成式
列表生成式基本形式
# 列表生成式基本形式
l = ["egg%i" %i for i in range(50) if i < 26]
print(l)
列表生成式应用
# 列表生成式
# l = ["egg%i" %i for i in range(50) if i < 26]
# print(l)
# 列表生成式拼接文件名,运行结果
# ['c:\egon\egeon.txt',
# 'c:\egon\a\a.txt',
# 'c:\egon\a\alex.txt',
# 'c:\egon\a\b\b.txt',
# 'c:\egon\a\b\zou.txt',
# 'c:\egon\a\b\c\c.txt']
import os
g = os.walk("c:\egon")
l = ["%s\%s" % (i[0], j)for i in g for j in i[2]]
print(l)
# 等价语句
# l = []
# for i in g:
# for j in i[2]:
# info = "%s\%s" % (i[0] , j)
# l.append(info)
# print(l)
列表生成式计算商品价格
# 列表生成式计算商品价格
# 在文件b.txt中有如下商品价格
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3
# 字符串分割后["apple", 10, 3]
cart = [] # 应付价格列表
with open("b.txt") as f:
for line in f:
info = line.strip().split()
res = int(info[-1]) * int(info[-2])
cart.append(res)
print(cart) # [30, 100000, 6000, 90000, 30]
print(sum(cart)) # 196060
# 列表生成器
with open("b.txt") as f:
cart = [int(line.split()[-1]) * int(line.split()[1]) for line in f] # 应付价格列表
print(cart) # [30, 100000, 6000, 90000, 30]
print(sum(cart)) # 196060
生成器表达式
类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
生成器应用1
def test():
for i in range(4):
yield i
g=test()
g1=(i for i in g)
g2=(i for i in g1)
print(list(g1)) # [0, 1, 2, 3],执行此步骤时,此时g1生成器指针已经走到最后。下次调用无结果。
print(list(g2)) # []
总结
生成器表达式的优点:
1.生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。
2.生成器还能有效提高代码可读性
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存<>br