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文件字符串转列表时遇到空行的问题
Jul 09 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
Python Series从0开始索引的方法
Nov 06 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
PyTorch基本数据类型(一)
May 22 Python
创建Django项目图文实例详解
Jun 06 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
Python csv文件记录流程代码解析
Jul 16 Python
解决python 输出到csv 出现多空行的情况
Mar 24 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 过滤页面中的BOM(实现代码)
2013/06/29 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
js的一些常用方法小结
2011/06/29 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
easyui validatebox验证
2016/04/29 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python解析最简单的验证码
2016/01/07 Python
彻底理解Python中的yield关键字
2019/04/01 Python
Python中Unittest框架的具体使用
2019/08/27 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
JPA面试常见问题
2016/11/14 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
就职演讲稿范文
2014/05/19 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
2014年测量员工作总结
2014/12/12 职场文书
稽核岗位职责范本
2015/04/13 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
4种非常实用的python内置数据结构
2021/04/28 Python