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
猜你喜欢
- 在JavaScript开发中,被人问到:null与undefined到底有啥区别?一时间不好回答,特别是undefined,因为这涉及到un
- 漂亮的代码是漂亮网站的基础,优秀的 CSS 只存在与同样优秀的 HTML 之上,干净的,语义的 HTML 代码让一个网站更健壮。本文讲述了1
- 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自
- 在输入框里面预设一段提示文字,当焦点在输入框的时候清空这段文字,这在目前来说已经不是什么新鲜事了。淘宝的搜索框就用到了这样一种设计:这种设计
- 本文实例讲述了asp.net C#实现解压缩文件的方法。一共给大家介绍了三段代码,一个是简单的解压缩单个zip文件,后一个可以解压批量的大量
- 加在< head>中< SCRIPT LANGUAGE="JavaScript">//more
- 概述在PHP中有一种代码复用的技术, 因为单继承的问题, 有些公共方法无法在父类中写出, 而 Trait可以应对这种情况, 它可以定义一些复
- Python获取时间范围内日期列表和周列表的函数 1、获取日期列表# -*- coding=utf-8 -*-import datetime
- 1.根据id获取元素document.getElementById("id属性的值");返回值是一个元素对象案例:点击按
- 下列代码都是以自己的项目实例讲述的,相关的文本内容很少,主要说明全在代码注释中自制图形验证码这里所说的图形验证码都是自制的图形,通过画布、画
- 为什么是三谈为什么是三谈呢?一是因为这真的是一个被说烂的话题,二是因为太师傅在n年前就写过这篇再谈iframe自适应高度。之所以再提该问题,
- 本文实例分析了php中ob_flush函数和flush函数用法。分享给大家供大家参考。具体如下:ob_flush()函数: 取出PHP bu
- python读取Excel表格文件,例如获取这个文件的数据python读取Excel表格文件,需要如下步骤:1、安装Excel读取数据的库-
- 这十则CSS技巧汇编于网络,作为老手已经司空见惯了,也没有什么新意,但温故而知新,或许阅读一遍也有一定的启发,本文主要面对CSS新手朋友,有
- 1、目标场景用过Mac OS的朋友应该都遇到过,日常的文件操作会在同级目录下产生一些特定的临时文件。平常将文件夹打包成压缩包或拷贝文件夹到移
- 自己写的一个自动完成效果,暂时没有ajax数据源,用静态数据代替。仅供喜欢JavaScript的同学们参考,代码如下<!DOCTYPE
- 一、功能说明:1. 多线程方式抓取代理服务器,并多线程验证代理服务器ps 代理服务器是从http://www.cnproxy.com/ (测
- PHP屏蔽蜘蛛访问代码代码:常用搜索引擎名与 HTTP_USER_AGENT对应值百度baiduspider谷歌googlebot搜狗sog
- 继续我们的 Javascript 优化计划,上期已经做到怎么尽可能的缩小 Javascript 脚本的文件体积便于传输。不过这样做仅仅是不够
- print函数的功能是打印图窗或保存为特定文件格式。语法print(filename,formattype)print(filename,f