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实现的数据结构与算法之链表详解
Apr 22 Python
Python reduce()函数的用法小结
Nov 15 Python
python清除字符串中间空格的实例讲解
May 11 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
tensorflow如何批量读取图片
Aug 29 Python
解决Jupyter无法导入已安装的 module问题
Apr 17 Python
Python网页解析器使用实例详解
May 30 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
基于python实现matlab filter函数过程详解
Jun 08 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
详解Python如何批量采集京东商品数据流程
Jan 22 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为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
JS代码放在head和body中的区别分析
2011/12/01 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python中无限元素列表的实现方法
2014/08/18 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
python、Matlab求定积分的实现
2019/11/20 Python
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
经贸日语毕业生自荐信
2013/11/03 职场文书
平面设计师的工作职责
2013/11/21 职场文书
教师实习自我鉴定
2013/12/14 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
公司开除员工通知
2015/04/22 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android