python列表推导和生成器表达式知识点总结


Posted in Python onJanuary 10, 2020

首先来看一下代码:

chars = "abcd"
tmp = []
for char in chars:
 tmp.append(ord(char))
print(tmp)

这是一般的写法,将字符串中的每一个字符转换称ASCII码,然后存进一个tmp数组。

利用列表推导的方式

tmp = [ord(char) for char in chars]

输出:[97,98,99,100]

列表推导中也可以使用if和else。

当只有一个if时:

chars = "abcd"
tmp = [ord(char) for char in chars if ord(char)>=98]
print(tmp)

输出:['b','c','d']

额外提一下,当然我们也可以利用filter和map达到相同的效果

tmp = list(filter(lambda x:x>=98,map(ord,chars)))

这句话的意思是,使用map对chars中的每一个字符利用ord函数进行处理。再使用filter对这每一个字符的ASCII码进行过滤大于等于98的,最后将这些符合条件的值存进一个列表中。lambda x:x>98是一个匿名函数。

有一个if else时:

chars = "abcd"
tmp = [True if ord(char)>=98 else False for char in chars]
print(tmp)

输出:[False, True, True, True]

一般而言,列表推导应尽量保持简短。

再看下一个例子:利用列表推导计算笛卡儿积(以衣服的颜色和尺寸为例)

colors = ["black","white"]
sizes = ["S","M","L"]
tshirts = [(color,size) for color in colors for size in sizes]
print(tshirts)

生成器表达式可以用于生成其它数据类型的序列,虽然列表推导也可以初始化元祖、数组和其它类型,但是生成器表达式是更好的选择。这是因为生成器表达式背后遵从迭代器协议,可以逐个产生元素,而不是先建立一个完整的列表

生成器表达式语法和列表差不多,只不过把方括号变成圆括号。

用生成器表达式生成元组和数组例子:

chars = "abcd"
tmp = tuple(ord(char) for char in chars)
print(tmp)

输出:(97, 98, 99, 100)

import array
chars = "abcd"
a = array.array("I",(ord(char) for char in chars))
print(a)

输出:array('I', [97, 98, 99, 100])

array的构造方法须提供两个参数,第一个是数组中元素的存储方式。如果生成器表达式是唯一的参数,就不用括号括起来,这里不是唯一的,因此要用括号括起来。

colors = ["black","white"]
sizes = ["S","M","L"]
for tshirt in ("%s %s" % (c,s) for c in colors for s in sizes):
  print(tshirt)

输出:

black S
black M
black L
white S
white M
white L

以上就是本次介绍的全部相关知识点,感谢大家的学习和对三水点靠木的支持。

Python 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
Python获取任意xml节点值的方法
May 05 Python
Python的装饰器用法学习笔记
Jun 24 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
Python dict的常用方法示例代码
Jun 23 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
Python和Bash结合在一起的方法
Nov 13 Python
Jupyter Notebook 安装配置与使用详解
Jan 06 Python
pytorch的梯度计算以及backward方法详解
Jan 10 #Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 #Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 #Python
Python 实现将数组/矩阵转换成Image类
Jan 09 #Python
python 实现将Numpy数组保存为图像
Jan 09 #Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 #Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 #Python
You might like
一个PHP二维数组排序的函数分享
2014/01/17 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
js实现交通灯效果
2017/01/13 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
python如何实现内容写在图片上
2018/03/23 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
python中bytes和str类型的区别
2019/10/21 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
学校三节实施方案
2014/06/09 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
新闻人物通讯稿
2014/10/09 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫