• Python3 之 列表推导式


    列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。

    它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。

    列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。

    下面看一个具体的例子:

      实例1:求10以内每个数字的平方值,保存到列表中

      以往,我们会用for循环来实现:

    1 list1 = []
    2 for x in range(10):
    3     list1.append(x**2)

      如果用列表推导式,如下:

    1 list1 = [x ** 2 for x in range(10)]

      只用一行代码,就搞定。

      实例3:复杂的循环嵌套

      把一个矩阵(以列表为元素的列表)展平为一个列表。首先,我们用for循环来实现一下:

     1 matrix = [
     2     [1, 2, 3],
     3     [4, 5, 6],
     4     [7, 8, 9],
     5 ]
     6 
     7 # 方法1:用for循环来处理
     8 mylist_1 = []
     9 for i in matrix:
    10     for j in i:
    11         mylist_1.append(j)
    12 print(mylist_1)         #[1, 2, 3, 4, 5, 6, 7, 8, 9]

      接下来,我们用列表推导式实现:

    1 mylist_2 = [j  for i in matrix for j in i]
    2 print(mylist_2) #[1, 2, 3, 4, 5, 6, 7, 8, 9]

    还是一行代码就搞定,但一行里面有两个for,看起来很乱,两个for,哪个在前哪个在后呢?只要记住他们的顺序和不用推导式的原始for循环是一致的即可。

    列表推导式的可读性:

    一行代码搞定几行代码的事情,看上去很简洁,但是读起来很费劲,尤其是当条件语句很长的时候,把这一行代码变得很长,超过了代码规范规定的长度(一般是80个字符),也使得理解代码变得困难。

    面对一行长长的代码该如何下口读,如何理解呢?别着急,好在Python允许在中括号、花括号之间断行:

    列表推导式断行:

    断行前:

    1 mylist_2 = [j  for i in matrix for j in i]

    断行后:

    1  mylist_2 = [
    2      j
    3      for i in matrix
    4      for j in i
    5   ]  

    字典(dict)和集合(set)的推导式:

    前面我们也提到过,推导式不仅仅适用于列表,它同样使用于字典dict和集合set。

    把一个字典的key和value互换:

    changed = {value: key for key, value in input_dict.items()}

    用一个列表的所有单词的首字母生成一个集合:

    chars = {w[0] for w in words_list}

    通过以上讲解就可以轻松掌握Python的列表推导式(list comprehension)了,简而言之,就是把普通的多行for循环压缩成一行代码,这种压缩语法适用于列表、字典、集合等可迭代数据结构(iterables)。

  • 相关阅读:
    【软件安装】CentOS7安装Tengine_2_3_2(Nginx 1_17_0)
    【NET开发】图片处理类-仿照七牛云图片处理功能
    Chrome下flash无法显示多个的问题。
    windows搭建ftp
    windows安装RabbitMQ
    安装Mysql,开发权限,以及复制数据库
    idea打jar包
    mysql数据库——选择优化的数据类型
    mysql数据库——事务隔离级别
    Java环境变量配置
  • 原文地址:https://www.cnblogs.com/gengyufei/p/11333094.html
Copyright © 2020-2023  润新知