如果你还在使用 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 循环。我们可以发现,只要明晰了基本概念,那么列表推导式还是非常容易使用的。

最新文章

  1. mono for android 用ISharedPreferences 进行状态保持 会话保持 应用程序首选项保存
  2. 又一种XML的解析方法
  3. 勤能补挫-简单But易错的JS&CSS问题总结
  4. lightOJ 1366 Pair of Touching Circles(统计矩形内相切圆对)
  5. asp.net Calendar 日历控件用法
  6. Linux上安装Redmine
  7. javascript技术难点之this、new、apply和call详解
  8. 【小练习06】HTML+CSS--教学大讲堂
  9. kubernetes 存储卷
  10. Zookeeper初始(一)
  11. 【Java线程安全】 — 常用数据结构及原理(未完结)
  12. Intellij Idea debug 模式如果发现异常,即添加异常断点在发生异常处
  13. Ubuntu下Git从搭建到使用详解
  14. JAVA课堂练习-动手动脑--数组
  15. windows10+Python3.6+Anaconda3+tensorflow1.10.0配置和安装
  16. clear & file input & reset & file input
  17. CR, LF, CR/LF 回车 换行
  18. hbase 多个过滤器组合(列表)
  19. 转:在两个页面间翻转设置Animation动作的一些总结
  20. 20145325张梓靖 《Java程序设计》第7周学习总结

热门文章

  1. 深入理解JVM(③)线程与Java的线程
  2. Mysql基础(八):MySQL 表的一对一、一对多、多对多问题
  3. python 装饰器(四):装饰器基础(三)叠放装饰器,参数化装饰器
  4. Flarum 的安装与配置
  5. Centos 7 静态IP设置
  6. centos 安装 nginx 及配置 的坑
  7. 【管理员已阻止你运行此应用】windows defender图标打叉,无法打开mmc.exe解决办法
  8. web自动化 -- 浏览器窗口切换
  9. Python 正则表达式简单了解
  10. Mybatis(六)逆向工程generator