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的Template使用指南
Sep 11 Python
python中__call__方法示例分析
Oct 11 Python
Python Property属性的2种用法
Jun 21 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
Django模板Templates使用方法详解
Jul 19 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
Python如何操作docker redis过程解析
Aug 10 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
Python图像识别+KNN求解数独的实现
Nov 13 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 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 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php使用正则验证中文
2016/04/06 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
bootstrap中的 form表单属性role="form"的作用详解
2017/01/20 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
js实现移动端轮播图
2020/12/21 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
简单了解python PEP的一些知识
2019/07/13 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
python实现简易学生信息管理系统
2020/04/05 Python
python导入库的具体方法
2020/06/18 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
python实现定时发送邮件
2020/12/23 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
爱牙日活动总结
2014/08/29 职场文书
个人事迹材料范文
2014/12/29 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏