在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 变量类型及命名规则介绍
Jun 08 Python
python sort、sorted高级排序技巧
Nov 21 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
浅谈python标准库--functools.partial
Mar 13 Python
python从入门到精通 windows安装python图文教程
May 18 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
详解Python3 pandas.merge用法
Sep 05 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 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
国内咖啡文化
2021/03/03 咖啡文化
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
Javascript - HTML的request类
2006/07/15 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
python3实现点餐系统
2019/01/24 Python
python生成带有表格的图片实例
2019/02/03 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
python实现扫雷游戏的示例
2020/10/20 Python
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
致200米运动员广播稿
2014/02/06 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
老兵退伍标语
2014/10/07 职场文书
机关职员工作检讨书
2014/10/23 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
党支部鉴定意见
2015/06/02 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA