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 修改文件指定行的方法
May 15 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
Python将string转换到float的实例方法
Jul 29 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
Python列表操作方法详解
Feb 09 Python
Python 生成VOC格式的标签实例
Mar 10 Python
python 使用while循环输出*组成的菱形实例
Apr 12 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
Python 使用office365邮箱的示例
Oct 29 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
python3美化表格数据输出结果的实现代码
Apr 14 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
学习php过程中的一些注意点的总结
2013/10/25 PHP
PHP查询网站的PR值
2013/10/30 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
babel基本使用详解
2017/02/17 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
python解析基于xml格式的日志文件
2017/02/25 Python
python中的set实现不重复的排序原理
2018/01/24 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
试用期员工考核制度
2014/01/22 职场文书
计算机系本科生求职信
2014/05/31 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
2014年老干部工作总结
2014/11/21 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA