• 11_Python的列表推导式_Python编程之路


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

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

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

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


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

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

      

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

    但我们要讲的并不是这个

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

    比如像下面的两个式子

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

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

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

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

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

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

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

    比如下面这段代码

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

      

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

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

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

    多个for循环

    2个for循环

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

    代码如下所示

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

      

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

    三个for循环

    获取三维数组

    In [10]: muti_for_list = [(x, y, z) for x in range(2) for y in range (2) for z in range(2)]
    
    In [11]: muti_for_list
    Out[11]:
    [(0, 0, 0),
     (0, 0, 1),
     (0, 1, 0),
     (0, 1, 1),
     (1, 0, 0),
     (1, 0, 1),
     (1, 1, 0),
     (1, 1, 1)]
    

      

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

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

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

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

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

      

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

    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]
    
    In [13]: common_list
    Out[13]:
    [(0, 0, 0),
     (1, 1, 1),
     (2, 2, 2),
     (3, 3, 3),
     (4, 4, 4),
     (5, 5, 5),
     (6, 6, 6),
     (7, 7, 7),
     (8, 8, 8),
     (9, 9, 9)]
    

      

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

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

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

  • 相关阅读:
    不懂不可耻,可耻的是每当遇到不懂的东西不是想办法去学去了解而是极力掩饰。
    在咱学校的论坛上看到的一句话,觉得……我们都在等待某个人,等到累了,就随便牵起某人的手,默默地走进礼...
    在Linux下用Virtualbox虚拟机安装Windows XP
    大学里的挂科是对考前三天不用功的惩罚.这是教算法的赵PZ讲的,窃以为很有道理。可是接下来的十一天里我...
    壮哥!才发现你博客里这么多好东西,慢慢欣赏了,哈哈~~~~~~~~~~
    哥们现在用的什么?ghs不是又被封了吗
    提取字符串中的数字并分别保存
    十一天八考之路
    WPF使ListBox支持手势多选功能
    动手实现扩展属性为对象动态添加获取数据(续)
  • 原文地址:https://www.cnblogs.com/susmote/p/8894052.html
Copyright © 2020-2023  润新知