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

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

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

下面看一个具体的例子:

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

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

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

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

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

  只用一行代码,就搞定。

  实例3:复杂的循环嵌套

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

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

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

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

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

列表推导式的可读性:

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

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

列表推导式断行:

断行前:

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

断行后:

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

字典(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)。

Python3 之 列表推导式的更多相关文章

  1. Python2和Python3中列表推导式的不同

    Python2和Python3中列表推导式的不同 python2 >>> x = 'my girl' >>> lst = [x for x in 'hello'] ...

  2. python2和python3中列表推导式的变量泄露问题

    Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量.像下面这个 Python 2.7 控制台对话: Python 2.7.15 (default, ...

  3. python3.6 列表推导式学习

    a=[i for i in range(1,10) if i%2==0]print(a)c=[(x,y) for x in range(5) if x%2==0 for y in range(5) i ...

  4. python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

  5. python3 map,filter和列表推导式

    num_list = [11,2,-33,10,7,3,5,43] 1.filter  函数 获取num_list大于5的元素,并返回列表 用lambda表达式实现: # 在python2 中 fil ...

  6. python3列表推导式和生成器。

    1.把一个字符串变成 Unicode 码位的列表 >>> symbols = '$¢£¥€¤' >>> codes = [] >>> for sy ...

  7. Python3 三元表达式、列表推导式、生成器表达式

    Python3 三元表达式.列表推导式.生成器表达式 三元表达式 表达式中,有三个元素 name = input("请输入姓名: ")ret = '输入正确' if name == ...

  8. Python2中的列表推导式存在变量泄漏问题,在Python3中不存在

    列表推导式(list comprehension) Python2: >>> x = 'my homie' >>> dummy = [x for x in 'ABC ...

  9. python3进阶之推导式之列表(list)推导式(comprehensions)

    1.前言 推导式,英文名字叫comprehensions,注意与comprehension(理解)只有s字母之差.推导式又可以叫解析式,推导式可以从一种数据序列构建新的数据序列的结构体.推导式分为,列 ...

随机推荐

  1. Xbim.GLTF源码解析(四):轻量化处理

    原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10839433.html 在IFC标准中,由IfcRepresentationMap支持 ...

  2. Django配置实现数据库读写分离

    django在进行数据库操作的时候,读取数据与写数据(增.删.改)可以分别从不同的数据库进行操作. 1. 在配置文件中增加slave数据库的配置 2. 创建数据库操作的路由分发类 在meiduo_ma ...

  3. Flask框架实现给视图函数增加装饰器操作示例

    在@app.route的情况下增加装饰器的写法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  4. phpstudy 升级mysql到mysql5.7

    前言 今天在工作发现一个错误,在往本地导数据表的时候老是报错: ? 1 [Err] 1294 - Invalid ON UPDATE clause for '字段名' column 报错的数据表字段: ...

  5. 数竞大佬jhc的三角函数复习题

    班主任让数竞大佬jhc整理的三角函数复习题,我参与编辑完成.个别题目来自参考书.度盘pdf格式下载:复习题提取码419d,答案提取码5a12 "单纯"的运算 本文由蒋浩川原创,由\ ...

  6. git .gitignore详解

    1.最近使用git又遇到一个陷阱: 场景:A和B使用的不同的编译器做的同一个解决方案下的不同的项目工程,刚开始没考虑到版本问题,后来发现A上传的csproj在B需要做很麻烦修改才能打开,后来想到各自用 ...

  7. [2018-06-28] django项目 实例

    实例一.显示一个基本的字符串在网页中 首先先进入views.py def home(request): string = u'随便写' return render(request, 'home.htm ...

  8. Ubuntu18.04 安装在VMware 14中无法全屏问题解决

    现象:在安装完Ubuntu18.04后发现在虚拟机中不能全屏,安装Vmware Tools后还是无法解决,修改分辨率亦不成功. 原因:WAYLAND限制 解决方法:取消ubuntu中的显示设备WAYL ...

  9. cdq分治 陌上花开(内无题解)

    由于有归并排序 要注意是对原来的那个元素进行更新答案和删除操作 而不是占据原来那个元素下标的元素

  10. 学习 Git

    Git 简介 Git是目前比较流行的分布式版本控制系统之一,能够记录文件的每次修改,还实现了多人并行开发; Git 组成 工作区(写东西之地) 暂存区 本地仓库(.git) 远程仓库(.repro) ...