在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 相关文章推荐
Python函数中定义参数的四种方式
Nov 30 Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
使用python 和 lint 删除项目无用资源的方法
Dec 20 Python
详解python中asyncio模块
Mar 03 Python
Django 实现下载文件功能的示例
Mar 06 Python
Python实现个人微信号自动监控告警的示例
Jul 03 Python
python分布式计算dispy的使用详解
Dec 22 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
python subprocess pipe 实时输出日志的操作
Dec 05 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+javascript模拟Matrix画面
2006/10/09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
python zip()函数使用方法解析
2019/10/31 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
奉献演讲稿范文
2014/05/21 职场文书
体育运动口号
2014/06/09 职场文书
小组口号大全
2014/06/09 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
中国世界遗产导游词
2015/02/13 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js