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实现的归并排序算法示例
Nov 21 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
python语音识别实践之百度语音API
Aug 30 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
vue学习笔记之动态组件和v-once指令简单示例
Feb 29 Python
Python hashlib模块的使用示例
Oct 09 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
python opencv通过4坐标剪裁图片
Jun 05 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学习 计数器实例代码
2008/06/15 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
python字符串str和字节数组相互转化方法
2017/03/18 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
Python从入门到精通之环境搭建教程图解
2019/09/26 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
家电创业计划书
2019/08/05 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
pytorch中的numel函数用法说明
2021/05/13 Python
python opencv旋转图片的使用方法
2021/06/04 Python
java设计模式--建造者模式详解
2021/07/21 Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android