python列表推导和生成器表达式知识点总结
作者:西西嘛呦 发布时间:2021-09-13 00:13:42
首先来看一下代码:
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
来源:https://www.cnblogs.com/xiximayou/p/12174138.html


猜你喜欢
- 1 简介今天我要给大家介绍的这个Python库prettymaps非常的有趣,基于它,我们只需要简单的代码就可以对地球上给定坐标和范围的任意
- sql2000安全很重要将有安全问题的SQL过程删除.比较全面.一切为了安全!删除了调用shell,注册表,COM组件的破坏权限use&nb
- 前言: 随着innodb的普及,innobackup也成为了主流备份方式。物理备份对于新建slave,全库恢复的需求都能从容应对。 但当面临
- 暂时性死区只要块级作用域存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。这么说可能有些抽象,举个例子:var
- 前言在使用传统物理机或云服务器上部署项目都会存在一些痛点比如:项目部署速度慢、资源浪费、迁移难且扩展低而使用 Docker 部署项目的优势包
- 前言正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置
- 使用python的turtle库画一个方格和圆打开python编译器,导入turtle库from turtle import *首先画一个距
- 应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。那么如何提高数据库SQL语句执行速度呢?有人会说性
- 本文实例为大家分享了UDP实现文件传输的具体代码,供大家参考,具体内容如下tcp进行文件传输看这里–python实现TCP文件接发这里实现的
- 本文实例讲述了Python编程实现及时获取新邮件的方法。分享给大家供大家参考,具体如下:#-*- encoding: utf-8 -*-im
- 0x01 OpenCV安装 通过命令pip install opencv-python 安装pip install opencv-
- keras.utils.to_categorical这个方法,源码中,它是这样写的:Converts a class vector (int
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- 因为系统的一个Bug,导致数据库表中出现重复数据,需要做的是删除重复数据且只保留最新的一条数据。具体场景是这样的有张订单关联额外费用表,而且
- 关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码。这样并不利于初学者的学习,希望这篇文章可以更通
- 很早前就遇到这个空值的属性,它既出现在 html 文档中,也出现在 xml 中,一直都回避,放之任之,反正也不影响文档的正确性。隐隐约约过了
- 今早在对一张table 创建primay key过程中发生了断电,当电脑再次启动时候,发现mysql 服务无法启动,使用 net start
- Python 3.10.0a2 版本已经于 2020-11-04 发布,因此我们可以窥见 Python 3.10 的一些新特性。这些新特性很
- 前言默认情况下SQL SERVER的安装路径与数据库的默认存放路径是在C盘的--这就很尴尬。平时又不注意,有天发现C盘的剩余空间比较吃紧了,
- 表结构学生表如下:CREATE TABLE `t_student` ( `id` int NOT NULL AUTO_INCRE