python开发入门——列表生成式


Posted in Python onSeptember 03, 2020

介绍

本文主要介绍Python中列表生成式的基本知识和使用

生成列表

要生成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]

这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。

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

复杂表达式 (TODO)

使用for循环的迭代不仅可以迭代普通的list,还可以迭代dict。

假设有如下的dict:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:

tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'

注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。

把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了:

<table border="1">
<tr><th>Name</th><th>Score</th><tr>
<tr><td>Lisa</td><td>85</td></tr>
<tr><td>Adam</td><td>95</td></tr>
<tr><td>Bart</td><td>59</td></tr>
</table>

条件过滤

列表生成式的 for 循环后面还可以加上 if 判断。例如:

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

如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:

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

有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。

多层表达式

for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。
对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:

>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

翻译成循环代码就像下面这样:

L = []
for m in 'ABC':
for n in '123':
L.append(m + n)

结语

以上就是python开发入门——列表生成式的详细内容,更多关于python 列表生成式的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
详解Python实现按任意键继续/退出的功能
Aug 19 Python
Python调用服务接口的实例
Jan 03 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
详解Python locals()的陷阱
Mar 26 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
python利用Excel读取和存储测试数据完成接口自动化教程
Apr 30 Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 Python
Python中常见的数制转换有哪些
May 27 Python
Python WSGI 规范简介
Apr 11 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 #Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 #Python
Python开发入门——迭代的基本使用
Sep 03 #Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 #Python
Python多分支if语句的使用
Sep 03 #Python
Python判断字符串是否为合法标示符操作
Sep 03 #Python
图解Python中深浅copy(通俗易懂)
Sep 03 #Python
You might like
基于文本的留言簿
2006/10/09 PHP
删除数组元素实用的PHP数组函数
2008/08/18 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
vue el-table实现行内编辑功能
2019/12/11 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
django允许外部访问的实例讲解
2018/05/14 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
估算杭州有多少软件工程师
2015/08/11 面试题
大学生职业生涯规划范文
2013/12/31 职场文书
小组口号大全
2014/06/09 职场文书
信仰心得体会
2014/09/05 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
MySQL 计算连续登录天数
2022/05/11 MySQL