python 生成器、列表/字典/集合解析式区别
来源:互联网 发布:软件生命周期模型定义 编辑:程序博客网 时间:2024/06/08 10:57
一、列表解析
列表解析也叫列表推导式,是python编程中常用到的语法糖。列表推导是一个将一个列表(实际上是任意可迭代对象)转换成另一个列表的工具。在转换时,每个元素都可以按照某个条件被包含在新的列表中,并根据需要做出一些变换。
先看一例子,比如我想把某列表中的每项值都乘以2
# 迭代列表for方法nlist = range(5) # 用range内置函数快速生成列表[0, 1, 2, 3, 4]mlist = list() # 创建新的空列表对象for i in mlist: mlist.append(i)print mlist[0, 2, 4, 6, 8]# 利用列表推导式,只需一行代码,6得不行,python就那么屌mlist = [i * 2 for i in range(5)]print mlist[0, 2, 4, 6, 8]
列表推导式结合if
关键字可以为我们做一些过滤
# 过滤掉列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]中值为奇数的项lst = [i for i in range(11) if i % 2 == 0]print lst[0, 2, 4, 6, 8, 10]
列表推导式的嵌套循环
# [[1, 2, 3], [4, 5, 6]] --> [1, 2, 3, 4, 5, 6]nlist = [[1, 2, 3], [4, 5, 6]]lst = [i for item in nlist for i in item]print list[1, 2, 3, 4, 5, 6]
列表推导式是不是很6很屌啊 ~~
* 注: * 内置的map函数调用比等效的for循环要快两倍,而列表解析往往比map调用要
二、字典解析
字典的形式是: {key: val},所以字典解析式也是用花括号括起来的
# 快速生成值是键二倍的字典ndict = {x: x*2 for x in range(5)}print ndict{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
三、集合解析
python中集合也是用花括号括起来的,所以集合解析式: {x for x in iter}
# 快速生成1-10的集合nset = {x for x in range(1, 11)}print nset{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
四、生成器
1、何为生成器
和返回一个值并退出的常规函数不同,生成器是可以从其退出的地方继续的函数。用到的关键字:yield
2、生成器函数应用
def test(num): for i in range(num): a = yield i * 2 print a
g = test(5)
g
<generator object test at 0x7f2e24449d70i>
next(g)
0
next(g)
2
next(g)
4
next(g)
8
next(g)
StopIteration ...
# 已迭代完,继续迭代所以抛异常
下面我们看看生成器函数的协议:`send`和 `next```` pythondef test(num): for i in range(num): a = yield i * 2 if a == 22: print '剪刀手最2...' print a
x = test(5)
next(x)
0
x.send(11)
11
1
x.send(22)
剪刀手最2…
2
next(x)
3
用send方法,编写一个能够被它的调用着终止的生成器。
3、生成器表达式
类似列表推导式,但用的的圆括号:()
g = (x * 2 for x in range(5))
g
<generator object <genexpr> at 0x7f2e1e80a410>
next(g)
0
next(g)
1
注:生成器是单迭代器对象
g = gg = (x * 2 for x in range(5))
next(g)
0
next(g)
1
next(gg)
2
4、生成器 VS 列表推导式
列表推导式是一次性创建所有数据的,而生成器是生成对象,需要我们调用next
方法逐一获取元素。假设我创建的数据很大很大(比如一千万),列表推导式会一次性创建,需要分配很大的内存空间存放这一千万数据,而生成器不会,只是创建了一个生成器对象,所以生成器更节省内存。
- python 生成器、列表/字典/集合解析式区别
- python知识点: 列表解析/字典解析/集合解析/生成器解析
- python 列表、字典、集合解析
- python 列表,元素,集合,字典区别
- Python 列表、元组、字典、集合 区别
- Python列表,集合,字典
- python 列表、字典、集合
- Python列表推导式、字典推导式、生成器示例
- Python列表解析和生成器
- 列表、字典、集合的解析
- 理解Python中列表,元组,字典,集合的区别
- python中列表 元组 字典 集合的区别
- python中列表 元组 字典 集合的区别
- python 列表 元组 字典 集合 的区别
- Python 列表、元组、字典、集合的区别
- python中列表,元祖,字典,集合区别和使用方法
- python 列表,字典 ,集合推导
- <23>python学习笔记——列表解析,字典解析,集合解析筛选元素
- Android笔记4
- librealsense API
- 后端简历问题
- ThinkJS项目添加页面分页功能
- 【NOIP 模拟题】[T3] 光(莫比乌斯反演)
- python 生成器、列表/字典/集合解析式区别
- Unicode字符类
- linux make使用选项
- PopupWindow的简单用法
- Android笔记5
- 使用Nginx+Lua(OpenResty)开发高性能Web应用
- epoll模型的理解封装与应用
- 【11月13日】排序算法的效率问题+彩蛋
- 从傅里叶级数到傅里叶变换