在Python中使用列表生成式的教程


Posted in Python onApril 27, 2015

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):

>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...  L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

三层和三层以上的循环就很少用到了。

运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

>>> import os # 导入os模块,模块的概念后面讲到
>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']

for循环其实可以同时使用两个甚至多个变量,比如dict的iteritems()可以同时迭代key和value:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.iteritems():
...   print k, '=', v
... 
y = B
x = A
z = C

因此,列表生成式也可以使用两个变量来生成list:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.iteritems()]
['y=B', 'x=A', 'z=C']

最后把一个list中所有的字符串变成小写:

>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

小结

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

思考:如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:

>>> L = ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'lower'

使用内建的isinstance函数可以判断一个变量是不是字符串:

>>> x = 'abc'
>>> y = 123
>>> isinstance(x, str)
True
>>> isinstance(y, str)
False

请修改列表生成式,通过添加if语句保证列表生成式能正确地执行。

Python 相关文章推荐
在Django中创建第一个静态视图
Jul 15 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
python的re模块使用方法详解
Jul 26 Python
python hashlib加密实现代码
Oct 17 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
Python操控mysql批量插入数据的实现方法
Oct 27 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 Python
python在协程中增加任务实例操作
Feb 28 Python
讲解Python中的递归函数
Apr 27 #Python
理解Python中函数的参数
Apr 27 #Python
Python中自定义函数的教程
Apr 27 #Python
在Python中使用dict和set方法的教程
Apr 27 #Python
在Python中使用判断语句和循环的教程
Apr 25 #Python
详解Python中列表和元祖的使用方法
Apr 25 #Python
详解Python当中的字符串和编码
Apr 25 #Python
You might like
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
jquery 问答知识整理
2010/02/11 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
Python解惑之整数比较详解
2017/04/24 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Django实现学员管理系统
2019/02/26 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
技术人员面试提纲
2013/11/28 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
教师个人工作总结范文2014
2014/11/10 职场文书
介绍信怎么写
2015/05/05 职场文书
新店开张宣传语
2015/07/13 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
MySQL三种方式实现递归查询
2022/04/18 MySQL