首页 » 编程 » Python » 正文

生成器表达式

day24


# 列表生成式,列表大的话占内存
l = ["agg%s" % i for i in range(20)]
print(l)


# 生成器表达式,迭代器省内存
g = ("agg%s" % i for i in range(20))
# print(g)
# print(g.__next__())
# print(g.__next__())
for i in g:  # 可通过for循环或next取值
    print(i)


将文件中每一行首尾的空格去掉

a.txt 内容:

  asdgdfg
  dgdfgfgfdhgfdhfgjgjgfd
 dffdhf
dfgdfhfgdjdjgjhgjgh123456732
       dgdfhsfhhgfhfdsdh
       dfhfghgfjfhgj
   fghjfghjhdfgggggggggggggggggggg


# 传统方式
f = open("a.txt")
newf = []
for line in f:
    line = line.strip()
    newf.append(line)
print(newf)
f.close()


# 列表生成式方式
f = open("a.txt")
f1 = [line.strip() for line in f]
print(f1)
f.close()


# 生成器表达式
f = open("a.txt")
f2 = (line.strip() for line in f)
# print(f2)
# print(next(f2))
# print(next(f2))
for i in f2:
    print(i)
f2.close()


f11 = open("a.txt")
g = (line.strip() for line in f11)
l3 = list(g)  # 转为列表来查看迭代器里的值
print(l3)
f.close()


列表生成式和生成器表达式都是声明式编程,如同声明一个变量一样。


print(sum([1, 2, 3, 4, 5]))

numb_g = (i for i in range(5))
print(sum(numb_g))

运行结果:

15
10


求文件b.txt中商品的费用总和
b.txt内容:

apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
# 传统方式
money_list = []
with open("b.txt") as f:
    for line in f:
        goods = line.split()
        res = float(goods[-1]) * float(goods[-2])
        money_list.append(res)
print(money_list)
print(sum(money_list))

# 生成器表达式方式
with open("b.txt") as f:
    g = (float(line.split()[-1]) * float(line.split()[-2]) for line in f)
    print(sum(g))
# 模拟数据库查询,传统方式,变成字典
product_list = []
with open("b.txt") as f:
    for line in f:
        line = line.split()
        pro_dict = {"name": line[0], "price": line[1], "count": line[2]}
        product_list.append(pro_dict)
print(product_list)

# 模拟数据库查询,生成表达式方式
with open("b.txt") as f:
    p_list = (line.split() for line in f)  # 将每一行变为小列表放到元组
    p_dirc = ({"name": i[0], "price": i[1], "count": i[2]} for i in p_list)  # 将每一个小列表变为字典放到元组
    apple_dict = p_dirc.__next__()  # next获得一个字典元素
    print(apple_dict)
    print(apple_dict["count"])


发表评论

*