上一节我们结束了有关python的方法相关内容

这一节我们先来学习python的列表推导式

之前跟大家说过range方法的使用,在这里我就不做过多的解释了,如忘记了,请翻阅之前的介绍

列表推导式,是Python内置的一种极其强大的生成list的表达式

如果要生成一个list [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] 可以用 range(1 , 9):

  1. In [1]: list(range(1, 9))
  2. Out[1]: [1, 2, 3, 4, 5, 6, 7, 8]

  

非常简单操作,相信大家一定都会

但我们要讲的并不是这个

所谓的列表推导式,就是指的轻量级的循环创建列表:

比如像下面的两个式子

  1. In [2]: a = [i for i in range(1,10)]
  2.  
  3. In [3]: a
  4. Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  5.  
  6. In [4]: b = [10 for i in range(1, 10)]
  7.  
  8. In [5]: b
  9. Out[5]: [10, 10, 10, 10, 10, 10, 10, 10, 10]

  批量生成了两个列表,第一个是一个有顺序的从1到9的列表,第二个是生成了9个相同的数字10

简单讲一下这个列表推导式是怎么定义的

首先忽略推导式中的第一个字符,也就是 i 和 10 ,看后面的一段语句,很显然,是一个循环语句,之前讲过循环语句的,这里不详细解释了

然后再来观察最前面的字符,也就是列表中的元素,循环过的每一个都被作为列表的元素,如果你前面的字符是一个常数的话,那么就只需要考虑循环的次数,而不需要考虑循环的值

接下来,我们继续来加强这个列表推导式的应用

通过判断语句筛选列表元素

比如下面这段代码

  1. In [6]: list_if = [i for i in range(1, 10) if i%2 == 0]
  2.  
  3. In [7]: list_if
  4. Out[7]: [2, 4, 6, 8]

  

我们在里面加了判断条件,以获取给定循环范围内的所有的偶数

也就是说你可以在循环语句后面在加判断语句

这个还不能算是入门,接下来我们继续来加强列表推导式的应用

多个for循环

2个for循环

使用两个for循环语句,以获取二维列表

代码如下所示

  1. In [8]: muti_for_list = [(i ,j) for i in range(1, 5) for j in range (6, 10)]
  2.  
  3. In [9]: muti_for_list
  4. Out[9]:
  5. [(1, 6),
  6. (1, 7),
  7. (1, 8),
  8. (1, 9),
  9. (2, 6),
  10. (2, 7),
  11. (2, 8),
  12. (2, 9),
  13. (3, 6),
  14. (3, 7),
  15. (3, 8),
  16. (3, 9),
  17. (4, 6),
  18. (4, 7),
  19. (4, 8),
  20. (4, 9)]

  

这个列表推导式在一些算法领域会有涉及,我们通过连续写两个for循环语句,然后在开始以一个(i, j)作为获取的对象,在这里要注意以下,他是按照顺序执行的

三个for循环

获取三维数组

  1. In [10]: muti_for_list = [(x, y, z) for x in range(2) for y in range (2) for z in range(2)]
  2.  
  3. In [11]: muti_for_list
  4. Out[11]:
  5. [(0, 0, 0),
  6. (0, 0, 1),
  7. (0, 1, 0),
  8. (0, 1, 1),
  9. (1, 0, 0),
  10. (1, 0, 1),
  11. (1, 1, 0),
  12. (1, 1, 1)]

  

原理基本和二维数组的生成差不多,所以就不做过多解释了

在多维数组中使用判断语句

虽然我们在前面已经讲了多维数组的创建,但为了加强这个的复杂度,我们继续加一些条件

获取三维数组中每行组中元素都一样的数组 类似于下面这样的

  1. [(1, 1, 1),
  2. (2, 2, 2),
  3. (3, 3, 3)]

  

下面我们通过代码来实现这个功能

  1. In [12]: common_list = [(x, y, z) for x in range(10) for y in range (10) for z in range(10) if x == y and y == z]
  2.  
  3. In [13]: common_list
  4. Out[13]:
  5. [(0, 0, 0),
  6. (1, 1, 1),
  7. (2, 2, 2),
  8. (3, 3, 3),
  9. (4, 4, 4),
  10. (5, 5, 5),
  11. (6, 6, 6),
  12. (7, 7, 7),
  13. (8, 8, 8),
  14. (9, 9, 9)]

  

这个并不难实现,无非就是加个判断条件

列表推导式,就讲到这里,他还有很多种其他的用法,希望大家,自己去挖掘,去探索

特克斯博客官网 www.susmote.com

11_Python的列表推导式_Python编程之路的更多相关文章

  1. 14_Python将列表作为栈和队列_Python编程之路

    上一篇文章跟大家介绍了列表的一些方法,这一节我们还是讲列表 只是这一节我们要联系一些数据结构,来讲列表 栈 首先我们要理解一下栈是一种什么数据结构 栈(stack)又名堆栈,它是一种运算受限的线性表. ...

  2. 01-Python的介绍_Python编程之路

    首先用一句业内非常出名的话来介绍Python "人生哭短,我用Python" 这也是Python宣传时经常说的一句话 从这句话中,可以非常清楚Python他到底优点在哪里,为什么要 ...

  3. 06_Python的数据类型3元组,集合和字典_Python编程之路

    上一节跟大家讲了Python的列表,当然不是完整的讲完,后续我们还会提到,这一节我们还是来讲Python的数据类型 首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面 ...

  4. 07_Python的控制判断循环语句1(if判断,for循环...)_Python编程之路

    Python的数据类型在前几节我们都简单的一一介绍了,接下来我们就要讲到Python的控制判断循环语句 在现实编程中,我们往往要利用计算机帮我们做大量重复计算的工作,在这样的情况下,需要机器能对某个条 ...

  5. 09_Python定义方法_Python编程之路

    有关Python判断与循环的内容我们上几节已经跟大家一起学习了,这一节我们主要针对def 做一个讲解 def 定义一个方法 在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python ...

  6. 10_Python函数方法加深_Python编程之路

    上节课已经简单的跟大家讲了如何定义一个方法,但是并没有深入去讲,这一节我们继续来学习定义方法中需要注意的几点 默认参数 前面我们讲到定义一个方法时是可以传递参数的,除了这个功能,实际上python在定 ...

  7. 12_Python的(匿名函数)Lambda表达式_Python编程之路

    Python作为一门高级语言,与很多编程语言一样都具有匿名函数这一特征 匿名函数,也就Lambda表达式,通俗来讲就是不用命名的方法,直接定义,直接用即可 创建匿名函数需要用到Lambda关键字,下面 ...

  8. 15_Python模块化编程_Python编程之路

    之前跟大家讲的是一些python的数据基础,从这篇文章开始,我们开始正式学习python的模块化编程 下面我们解释一下什么叫做模块 之前已经讲过怎么去定义一个方法,如果你是用python交互器(自带交 ...

  9. 02-Python的下载和安装_Python编程之路

    原文发布在特克斯博客www.susmote.com 之前给大家讲了关于python的背景知识,还有Python的优点和缺点,相信通过之前的介绍很多人已经清楚自己到底要不要选择学习Python,如果已经 ...

随机推荐

  1. 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)

    好不容易又到周五了,周末终于可以休息休息了.写这一篇随笔只是心血来潮,下午问了一位朋友PAT考的如何,顺便看一下他考的试题,里面有最后一道题,是关于给出中序遍历和后序遍历然后求一个层次遍历.等等,我找 ...

  2. 常用排序算法的Java实现与分析

    由于需要分析算法的最好时间复杂度和最坏时间复杂度,因此这篇文章中写的排序都是从小到大的升序排序. 带排序的数组为arr,arr的长度为N.时间复杂度使用TC表示,额外空间复杂度使用SC表示. 好多代码 ...

  3. python全栈学习--day1

      计算机基础 CPU:中央处理器 内存:4GB,8GB,临时处理事务的地方,供给CPU数据. 硬盘:相当于电脑的数据库,存储着大量的数据,文件,电影等. 操作系统:执行者,支配所有关系 window ...

  4. 论文阅读——Visual inertial odometry using coupled nonlinear optimization

    简介:论文提出一种新的视觉里程计算法,其直接利用带噪声的IMU数据和视觉特征位置来优化相机位姿.不同于对IMU和视觉数据运行分离的滤波器,这种算法将它们纳入联合的非线性优化框架中.视觉特征的透视重投影 ...

  5. 通过软引用和弱引用提升JVM内存使用性能的方法(面试时找机会说出,一定能提升成功率)

    初学者或初级程序员在面试时如果能证明自己具有分析内存用量和内存调优的能力,这相当有利,因为这是针对5年左右相关经验的高级程序员的要求.而对于高级程序员来说,如果能在面试时让面试官感觉你确实做过内存调优 ...

  6. MySQL之数据的insert-delete-update操作

    主要是对数据的一些基本操作:增加.删除.修改

  7. 网络1712--c语言一二维数组作业总结

    1.成绩摆前头 1.1基本要求(1分) 按时交 - 有分 未交 - 0分 迟交一周以上 - 倒扣本次作业分数 抄袭 - 0分 泛泛而谈(最多七分) 1.2评分要点 PTA作业总结(4分) 同学代码互评 ...

  8. HDFS架构

  9. 20162323周楠《Java程序设计与数据结构》第六周总结

    学号 2016-2017-2 <程序设计与数据结构>第六周学习总结 教材学习内容总结 继承:从已有类派生一个新类,是面向对象程序设计的一个特点 在Java中只支持单继承,不支持多继承 继承 ...

  10. EXT3文件系统误删除导致文件系统中的邮件丢失恢复方法

    一.故障描述 由8块盘组成的RAID5, 上层是EXT3文件系统,由于误删除导致文件系统中的邮件丢失 二.镜像磁盘为防止数据恢复过程中由于误操作对原始磁盘造成二次破坏, 使用winhex软件为每块磁盘 ...