Python学习笔记(三)——List Comprehension 和 Generator Expression
来源:互联网 发布:windows u盘安装工具 编辑:程序博客网 时间:2024/06/05 07:33
代码及内容源自《Fluent Python》——Luciano Ramalho 著
1 列表解析(List Comprehensions)
>>> symbols = '$£¢¥€※'>>> codes=[]>>> for symbol in symbols:... codes.append(ord(symbol))
>>> codes
[36, 163, 162, 65509, 8364, 8251]
>>> codes_2=[ord(symbol) for symbol in symbols]>>> codes_2
[36, 163, 162, 65509, 8364, 8251]
了解一点Python的人都能读懂codes这个例子,但是在熟悉列表解析之后,会发现codes_2的可读性更强,因为它的目的更加清楚。
>>> beyond_ascii=list(filter(lambda c: c>127, map(ord, symbols)))>>> beyond_ascii
[163, 162, 65509, 8364, 8251]
>>> beyond_ascii_2=[ord(s) for s in symbols if ord(s) > 127]>>> beyond_ascii_2
[163, 162, 65509, 8364, 8251]
列表解析可以实现map和filter函数的功能,并且不需要在此挑战lambda表达式。
>>> colors=['black', 'white']>>> sizes=['S','M','L']>>> tshirts=[(color, size) for color in colors for size in sizes]>>> tshirts
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]
>>> for color in colors:... for size in sizes:... print((color, size))
('black', 'S')('black', 'M')('black', 'L')('white', 'S')('white', 'M')('white', 'L')
>>> tshirts=[(color, size) for size in sizes for color in colors]>>> tshirts
[('black', 'S'), ('white', 'S'), ('black', 'M'), ('white', 'M'), ('black', 'L'), ('white', 'L')]
列表解析也可以生成两个或多个列表的笛卡儿积(Cartesian Product),上例中,通过改变size和color语句的顺序,可以调整所生成列表的排序。
2 生成器表达式(Generator Expression)
生成器表达式与列表解析采用相同的语法,不同的是它使用“()”, 列表解析使用“[]”。
>>> tuple(ord(symbol) for symbol in symbols)
(36, 163, 162, 65509, 8364, 8251)
>>> import array>>> array.array('I', (ord(symbol) for symbol in symbols))
array('I', [36, 163, 162, 65509, 8364, 8251])
列表解析也可以用来初始化tuples、arrays、以及其他序列,但是使用生成器表达式能够节省内存,因为它利用迭代协议一项一项地生成内容,而不是建立一个列表后提供给另一个构造器。
>>> for tshirt in ('%s %s' % (c, s) for c in colors for s in sizes):... print(tshirt)
black Sblack Mblack Lwhite Swhite Mwhite L
这个例子中并不会产生一个包含所有6种衬衫的列表。
阅读全文
0 0
- Python学习笔记(三)——List Comprehension 和 Generator Expression
- python学习笔记——列表推导 list comprehension
- Python——List Comprehension
- Python中的 list comprehension 以及 generator
- Python学习笔记:列表推导式List Comprehension
- Python List Comprehension, Dictionary Comprehension
- python map和list comprehension 效率比较
- haskell学习笔记(2)-List Comprehension
- python技巧——list comprehension vs map
- Python技巧——list comprehension 与 functools.reduce
- python技巧——使用list comprehension生成素数(prime number)
- python list comprehension
- [python] List Comprehension
- python学习笔记--推导式(Comprehension)
- Python学习笔记(10)-生成器generator和迭代器Iterator
- [Python]学习:黑魔法之列表推导式(list comprehension)
- Python yield expression (generator)
- 列表解析(list comprehension) 与三目运算符
- 206. Reverse Linked List--链表翻转
- jquery post请求服务器资源
- 雅克比矩阵(Jacobian Matrix)的意义
- 高并发量网站解决方案
- Spring--LinkedCaseInsensitiveMap
- Python学习笔记(三)——List Comprehension 和 Generator Expression
- 自增主键的优缺点
- 结合代码彻底理解Spring AOP的术语
- 2017BNUZCPC
- iOS 设置圆角通用方法
- 使用 Office 365 PowerShell 管理用户帐户和许可证(二)使用 Office 365 PowerShell 查看授权和未授权的用户
- rex run 传参
- 38. Count and Say(第十二周)
- 海航集团王健出席海南省脱贫攻坚暨扶贫日主题晚会