在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 20 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
python Pandas 读取txt表格的实例
Apr 29 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
Django发送邮件功能实例详解
Sep 02 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
python 贪心算法的实现
Sep 18 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
Python 数据可视化之Matplotlib详解
Nov 02 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
newxtree.js代码
2007/03/13 Javascript
JQuery jsonp 使用示例代码
2009/08/12 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
Flask数据库迁移简单介绍
2017/10/24 Python
Python中的asyncio代码详解
2019/06/10 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
财务部出纳岗位职责
2013/12/22 职场文书
美术指导助理求职信
2014/04/20 职场文书
2014年党务公开方案
2014/05/08 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
个人自我剖析材料
2014/09/30 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
商业计划书范文
2019/04/24 职场文书