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 02 Python
Python带动态参数功能的sqlite工具类
May 26 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
Django如何开发简单的查询接口详解
May 17 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
python 绘制国旗的示例
Sep 27 Python
pycharm 的Structure界面设置操作
Feb 05 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 Python
写好Python代码的几条重要技巧
May 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
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
Python实现的多线程端口扫描工具分享
2015/01/21 Python
python如何在终端里面显示一张图片
2016/08/17 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
Python File(文件) 方法整理
2019/02/18 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
英国名牌男装店:Standout
2021/02/17 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
艺术系应届生的自我评价
2013/10/19 职场文书
环境科学专业个人求职的自我评价
2013/11/28 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
工商局个人工作总结
2015/03/03 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
教师聘用意向书
2015/05/11 职场文书