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 相关文章推荐
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
Python Numpy:找到list中的np.nan值方法
Oct 30 Python
python实现网页自动签到功能
Jan 21 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
wxPython色环电阻计算器
Nov 18 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
python基于socket函数实现端口扫描
May 28 Python
python读取xml文件方法解析
Aug 04 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
python之生产者消费者模型实现详解
2019/07/27 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
大学开学计划书
2014/04/30 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书