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列表操作之extend和append的区别实例分析
Jul 28 Python
Python解惑之True和False详解
Apr 24 Python
Python常见字典内建函数用法示例
May 14 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
python 输出所有大小写字母的方法
Jan 02 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
keras K.function获取某层的输出操作
Jun 29 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 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+Html+缓存
2006/12/20 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
node跨域请求方法小结
2017/08/25 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
一套C++笔试题面试题
2012/06/06 面试题
室内设计专业毕业生求职信
2014/05/02 职场文书
2014年就业工作总结
2014/11/26 职场文书
公司门卫岗位职责
2015/04/13 职场文书
创卫工作总结2015
2015/04/22 职场文书
工程款催款函
2015/06/24 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
2015年国庆节寄语
2015/08/17 职场文书
golang实现浏览器导出excel文件功能
2022/03/25 Golang