Python列表解析

l = ["egg%s" %i for i in range(100) if i > 50]
print(l)
l= [1,2,3,4]
s = 'hello'
l1 = [(num,s1) for num in l 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('D:\\test')
l1 = [for i in g for j in i]
file_path =[]
for i in g:
for j in i[-1]:
file_path.append('%s\\%s' % (i[0],j))
print(file_path)
l1 = ['%s\\%s' % (i[0],j) for i in g for j in i[-1]]
print(l1)

Python生成器表达式

用列表解析,生成的是列表,但是如果用列表会把整个列表全部读取到内存中,如果列表过大,内存会爆。

生成器表达式是把[]换成(),这就是生成器的形式,每次只读入内存一个值。

l1 = ('egg%s'%i for i in range(10))
print(l1) # 此时是生成器
print(next(l1)) #生成器通过next执行一次

结果:

generator object at 0x000000000282C048

用for进行迭代

for i in l1:
print(i)

模拟读取一个大文件:

这是for循环的方式:

l = []
f = open("a")
for line in f:
line = line.strip()
l.append(line) print(l)

列表解析:

l = [line.strip() for line in f]   # line.strip()这就是直接 添加到了l列表中
print(l)

用列表的方式占用内存太大:

生成器表达式:


g = (l.append(line.strip()) for line in f ) # 直接换成()就是生成器的方式
for i in g:
print(i)

练习 1###

sum list中的都是可迭代对象

money_list=[]
with open("b.txt") as f:
for line in f:
# goods = line.strip()
goods=line.split() # 对文件的内容进行分割
res = float(goods[-1])*float(goods[-2])
money_list.append(res)
print(money_list)

用sum求和的方式

f = open("b.txt")
g =(float(line.split()[-1])*float(line.split()[-2]) for line in f) #生成器
print(sum(g)) # sum中的是可迭代对象

练习2

从文件中读取的是字符串,想要进行处理必须是有格式的数据

res = []
with open("b.txt") as f:
for line in f:
l=line.split()
d = {}
d["name"] = l[0]
d["price"] = l[1]
d["count"] = l[2]
res.append(d)
print(res)

用声明式的编程

文件是迭代器,res此时也是,但是res来自于文件,所以在with中操作,文件关闭后res不能得到,放外面会报错,IO错误

with open("b.txt") as f:  # 文件是迭代器
res =(line.split() for line in f) # 此时res是生成器
# print(res)
dict=({"name":i[0],"price":i[1],"count":i[2]} for i in res)
for j in dict:
print(j)

结果:

{'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'}

对文件中的进行过滤


with open("b.txt") as f: # 文件是迭代器
res =(line.split() for line in f) # 此时res是生成器
# print(res)
dict_g=({"name":i[0],"price":i[1],"count":i[2]} for i in res if float(i[1])>10000)
print(dict_g)
# for i in dict_g:
# print(i)
print(list(dict_g)) # 这是一种查看的额方式

结果:

{'name': 'tesla', 'price': '1000000', 'count': '1'}

{'name': 'lenovo', 'price': '30000', 'count': '3'}

或者

[{'name': 'tesla', 'price': '1000000', 'count': '1'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}]

Python列表解析与生成器表达式的更多相关文章

  1. python列表解析和生成器表达式

    列表解析作为动态创建列表的强大工具,值得学习. 列表解析技术之前的状况--函数式编程. lambda.filter(), map() enumerate, sorted, any, all, zip ...

  2. Python中的列表解析和生成器表达式

    Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...

  3. Python全栈day18(三元运算,列表解析,生成器表达式)

    一,什么是生成器 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己内置的__iter__方法),所以生成器是可迭代对象. 二,生成器分类在python中的表现形式 1 ...

  4. Python基础(9)三元表达式、列表解析、生成器表达式

    一.三元表达式 三元运算,是对简单的条件语句的缩写.   # if条件语句 if x > f: print(x) else: print(y) # 条件成立左边,不成立右边 x if x > ...

  5. python的迭代器、生成器、三元运算、列表解析、生成器表达式

    一 迭代的概念 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前 ...

  6. Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化

    一.装饰器 一.装饰器的知识储备 1.可变长参数  :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...

  7. 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式

    一.装饰器 一.装饰器的知识储备 不想修改函数的调用方式,但是还想在原来的函数前后添加功能 1.可变长参数  :*args和**kwargs def index(name,age): print(na ...

  8. Python基础:08列表解析与生成器表达式

    一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法:     [exp ...

  9. Python day14迭代器,三元表达式,列表解析以及生成器表达式

    1.迭代器 str=['sds','ccc','dw'] lit_1=str.__iter__()#获取迭代器 print(lit_1.__next__())#打印下一个值 # 用while做for的 ...

随机推荐

  1. 无法加载MainifestResourceTransformer

    Cannot load implementation hint 'org.apache.maven.plugins.shade.resource.MainifestResourceTransforme ...

  2. 火狐浏览器httprequest插件添加和使用方法(适用于前后台分离,测试后台接口)

    第一步:打开火狐浏览器工具栏找到添加组件 1.如图1点击添加组件 第二步:添加组件Httprequest 1.如图2,检索Httprequest 2.如图3,将组件添加到火狐浏览器中 3.如图3.5, ...

  3. GoWeb开发_Iris框架讲解(一)

    Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...

  4. 自动化测试工具 Test Studio入门教程

    Test Studio安装 可以到下载试用版 官网 http://www.telerik.com/teststudio , 装完以后需要装silverlight 安装好了,主界面是介个样子的 Test ...

  5. 2014-10-22 NOIP模拟赛

    1 1 .传教士 (bishop) 问题描述:panzhili 王国的疆土恰好是一个矩形,为了管理方便,国王 jjs 将整个疆土划分成 N*M 块大小相同的区域.由于 jjs 希望他的子民也能信教爱教 ...

  6. [Xcode 实际操作]六、媒体与动画-(6)使用UIBlurEffect给图片添加模糊效果

    目录:[Swift]Xcode实际操作 本文将演示如何给图像添加模糊效果. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class V ...

  7. Java基础--常用API--字符串相关API

    一.java.lang.String 1.string对象不可变,被final修饰,不能被继承. 2.赋值方式: (1)直接赋值.比如: String name = "rick"; ...

  8. json 打印

    JsonObject jsonObj = new JSONObject(); jsonObj.put("success",true); jsonObj.put("msg& ...

  9. Exception inside CORBA when accessing a remote bean

    http://stackoverflow.com/questions/23291520/exception-inside-corba-when-accessing-a-remote-bean

  10. 黑马学习JavaWeb入门总结