迭代列表不要For循环,这是Python列表推导式最基本的概念
如果你还在使用 For 循环迭代列表,那么你需要了解了解列表推导式,看看它的基本概念都是什么。
列表解析式(List comprehension)或者称为列表推导式,是 Python 中非常强大和优雅的方法。它可以基于现有的列表做一些操作,从而快速创建新列表。在我们第一次见到列表推导式时,可能会感觉这种方法非常炫酷,因此写列表推导式是非常爽的一件事。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789
如果在我们刚接触 Python 时,列表推导式可能看起来比较复杂,但是了解后会发现它非常好用。正如上图所示,列表推导式不仅可读性非常强,它所需要的代码量是最少的,它的执行速度也是最快的。
对于列表推导式,我们可以从列表中选择具体的元素,并做一些操作和判断,从而创建新的列表。值得注意的是,我们甚至能使用 Pandas Series 或 NumPy Array 进行列表推导操作。下面让我们具体看看列表推导是什么吧!
什么是列表推导式
如果我们有一个列表,并希望抽取列表中的元素,那么最标准的方法是使用 Python 循环,但是我们也可以直接通过列表推导式,它只需一行代码就能搞定所有操作。当然,抽取列表元素的前提是,我们要理解列表是一种可迭代对象,它允许依次读取不同的元素。
想象一下,如果动物园中有很多不同的动物,每年每一只动物都需要定期体检,那么动物园就是列表。我们可以遍历整个动物园,并依次抽取动物,抽取的动物并不做进一步的处理,直接放到体检列表中。如下所示为一般 Python 循环的做法:
# Creating our animal park
animal_park = [ Rabbit , Rabbit , Rabbit , Rabbit , Cat , Cat , Cat , Cat , Cat , Cat , Cat , Turtle , Turtle , Turtle , Turtle , Turtle , Turtle , Turtle , Dog , Dog , Kangaroo , Kangaroo , Kangaroo , Kangaroo , Kangaroo , Kangaroo ]
# Creating a new list for our animal doctor with all animals
animal_doctor = []
for animal in animal_park:
animal_doctor.append(animal)
上面的代码很简单,用一个 for 循环就行,它的语义也很容易理解。如下我们可以使用列表推导式重写这一个循环:
animal_doctor = [animal for animal in animal_park]
通过列表推导式,我们将代码量由三行降低到一行。如果对比两者,我们会发现它们其实是一样的,差不多都是创建、遍历和接收三部分。
图1:标准循环与列表推导的对比。
条件语句
这样看起来列表推导式也没什么大不了,但别忘了它还能对元素做进一步操作,例如加个条件语句。在标准的列表循环中,我们的条件语句如下所示会加到 for 循环中。
animal_doctor = []
for animal in animal_park:
if animal != Dog and animal != Cat :
animal_doctor.append(animal)
在列表推导式中,我们可以将条件加到里面,用稍微长一点的单行代码完成整个流程。上面代码块可以等价地表达为:
nimal_doctor = [animal for animal in animal_park if animal != Dog and animal != Cat ]
另外非常重要的一点是,列表推导式的速度非常快。如下两者都加了条件语句,但是列表推导式要比一般的循环语句快了 51%。
图2:列表推导与标准循环二者速度的对比。
最后,如果你使用过列表推导式创建新的列表,那么你最好一直使用它,因为我们没有原因再使用标准 Python 循环。我们可以发现,只要明晰了基本概念,那么列表推导式还是非常容易使用的。
迭代列表不要For循环,这是Python列表推导式最基本的概念的更多相关文章
- python的推导式 —— 列表推导式、集合和字典推导式
python的推导式是用于快速处理数据的方法. 主要有:列表推导式.集合推导式和字典推导式 import time import numpy as np 列表推导式: 1. 速度快 t1 = time ...
- python字典推导式 - python基础入门(17)
在昨天的文章中,我们介绍了关于python列表推导式 的使用,字典推导式使用方法其实也类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,所以整个表达式需要写在{}内部. ...
- day15(PYTHON)推导式{生成器,字典,列表,集合}
#[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 # ...
- python列表、集合、元祖、字典推导式
a = [1, 2, 3, 4, 5, 6, 7, 8]l=[i**2 for i in a if i**2>=16] #列表推导式+if判断print(l)print(type(l)) b={ ...
- python 生成器推导式与列表推导式的区别
生成器表达式现用现生成,列表推导式一次性生成静态数据 L = [2, 3, 5, 7] L2 = (x**2+1 for x in L) it = iter(L2) print(next(it)) L ...
- Python之推导式、生成器表达式
l = [i for i in range(10)] print(l) l1 = ['选项%s'%i for i in range(10)] print(l1) 1.把列表解析的[]换成()得到的就是 ...
- [ python ] 各种推导式
各种推导式,主要使用示例演示用法 列表生成式 示例1:求0-9每个数的平方 li = [x*x for x in range(10)] print(li) # 执行结果: # [0, 1, 4, 9, ...
- Python生成器/推导式/生成器表达式
一 生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样,取值方式和迭代器一样(__next__(), send(): 给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创 ...
- python各种推导式分析
推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...
随机推荐
- Django框架03 /视图相关
Django框架03 /视图相关 目录 Django框架03 /视图相关 1. 请求相关 2.响应相关 3.FBV和CBV 视图(视图函数和视图类) 3.1 类视图 CBV 3.2 视图函数 FBV ...
- python面向对象07/异常处理
python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...
- 关于报错,Whoops! Lost connection to ws://XXX.XXX.XXX.XXX:15684/ws
昨天,在玩rabbitMQ时候,用stompJS从web连接ranbbitMQ时,报了标题的错误消息! 我把我这个html页面代码贴上,简单得讲,就是断开后,重新连接即可.
- bzoj1661[Usaco2006 Nov]Big Square 巨大正方形*
bzoj1661[Usaco2006 Nov]Big Square 巨大正方形 题意: n*n的图中有一些J点,一些B点和一些空白点,问在空白点添加一个J点所能得到的有4个J点组成最大正方形面积.n≤ ...
- 一文读懂Java中的动态代理
从代理模式说起 回顾前文: 设计模式系列之代理模式(Proxy Pattern) 要读懂动态代理,应从代理模式说起.而实现代理模式,常见有下面两种实现: (1) 代理类关联目标对象,实现目标对象实现的 ...
- Ethical Hacking - NETWORK PENETRATION TESTING(13)
Nmap Nmap is a network discovery tool that can be used to gather detailed information about any clie ...
- db2创建nickname
db2创建nickname创建步骤 1.创建 server create server servername type DB2/AIX version 10.5 wrapper drda authid ...
- python监控服务器应用日志,推送钉钉机器人,实时关注日志异常
生产环境多台服务器上部署了多个应用,日志出现报错时,无法及时反馈到开发人员.部署一个大型的运维监控应用,不但耗资源,而且配置也不简单. 简简单单写个python脚本来监控服务器日志就简单多了,废话不多 ...
- uTools - 你的生产力工具集
工具介绍 uTools是一个极简.插件化.跨平台的现代化桌面软件.通过自由选配丰富的插件,打造你得心应手的工具集合. 通过快捷键(默认alt+space)就可以快速呼出这个搜索框.它相当聪明,可以支持 ...
- scratch编程我的世界3D史蒂夫
这个程序我们只能制作出一个3D模型而已,并不是真正的我的世界整个游戏: 效果很炫酷吧!现在我们就来看看是怎样编程的吧! 首先,这个模型是有无数个平面克隆体摞在一起,旋转后会产生一种立体的错觉,是不是有 ...