经常会看到类似于 [i for i in range(1,10)] 的表达式,这种表达式称为列表解析(List Comprehensions),类似的还有字典解析、集合解析等等。

列表解析式是将一个列表(实际上适用于任何可迭代对象)转换成另一个列表的工具。在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。

每个列表解析式都可以重写为 for 循环,但不是每个 for 循环都能重写为列表解析式,列表解析比 for 更精简,运行更快。


基本语法

[expression for iter_val in iterable]

[expression for iter_val in iterable if cond_expr]


列表解析式

举例说明,将 1-10 每个数乘以 2 放入一个列表:

用 for 循环实现如下:

>>> li = []
>>> for i in range(1, 11):li.append(i*2)>>> print(li)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

用列表解析式实现如下:

>>> li = [i*2 for i in range(1, 11)]
>>> print(li)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

筛选条件

此外列表解析式还支持添加筛选条件,例如筛选出 i*2>10 的数:

>>> li = [i*2 for i in range(1, 11) if i*2 > 10]
>>> print(li)
[12, 14, 16, 18, 20]

嵌套循环

更复杂一点,嵌套循环也可以转换成列表解析式,先看一个普通的嵌套循环:

>>> li1 = ['A', 'B', 'C']
>>> li2 = ['1', '2', '3']
>>> li3 = []
>>> for m in li1:for n in li2:li3.append((m,n))>>> print(li3)
[('A', '1'), ('A', '2'), ('A', '3'), ('B', '1'), ('B', '2'), ('B', '3'), ('C', '1'), ('C', '2'), ('C', '3')]

列表解析式实现如下:

>>> li1 = ['A', 'B', 'C']
>>> li2 = ['1', '2', '3']
>>> li3 = [(m,n) for m in li1 for n in li2]
>>> print(li3)
[('A', '1'), ('A', '2'), ('A', '3'), ('B', '1'), ('B', '2'), ('B', '3'), ('C', '1'), ('C', '2'), ('C', '3')]

字典解析式

普通 for 循环:

>>> a = {'language1':'python', 'language2':'java','language3':'c'}
>>> b = {}
>>> for key, value in a.items():if key == 'language1':b[key] = value>>> print(b)
{'language1': 'python'}

用字典解析式实现如下:

>>> a = {'language1':'python', 'language2':'java','language3':'c'}
>>> b = {key: value for key, value in a.items() if key == 'language1'}
>>> print(b)
{'language1': 'python'}

集合解析式

普通 for 循环:

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b = set()     # 创建一个空集合
>>> for i in a:if i > 5:b.add(i)>>> print(b)
{6, 7, 8, 9, 10}

用集合解析式实现如下:

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b = {i for i in a if i > 5}
>>> print(b)
{6, 7, 8, 9, 10}

【Python 必会技巧】[i for i in range(1,10)] — 列表解析式,列表中使用 for 循环相关推荐

  1. python序列中各元素之间存在顺序关系_《Python Cookbook(第3版)中文版》——1.10 从序列中移除重复项且保持元素间顺序不变-阿里云开发者社区...

    本节书摘来自异步社区<Python Cookbook(第3版)中文版>一书中的第1章,第1.10节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节 ...

  2. 【Python 必会技巧】使用 Python 追加写入 json 文件或更改 json 文件中的值

    追加写入 json 文件 有一个 test.json 文件,包含内容如下: {"key_1": "value_1" } 现需要追加写入 json 文件,向其中增 ...

  3. 【Python 必会技巧】copy 模块中 copy() 与 deepcopy() 函数的区别

    Python 中赋值语句不复制对象,而是在目标和对象之间创建绑定关系.对于自身可变或者包含可变项的集合对象,开发者有时会需要生成其副本用于改变操作,进而避免改变原对象.copy 模块提供了通用的浅层复 ...

  4. 【Python 必会技巧】lambda 表达式(匿名函数)及其在内置函数中的应用

    lambda 表达式,又称匿名函数,即,函数没有具体的名称,常用来表示内部仅包含 1 行表达式的函数. 使用 lambda 编写的代码更加简洁紧凑,但是 lambda 函数支持的功能却是十分有限的,目 ...

  5. 【Python 必会技巧】判断字符串是否为字母/数字/大小写/空白字符/有效标识符/可打印字符

    简单来说: str.isalnum():判断所有字符是否都是数字或者字母 str.isalpha():判断所有字符是否都是字母 str.isdigit():判断所有字符是否都是数字 str.islow ...

  6. 【Python 必会技巧】使用 join() 方法将序列中的元素拼接成字符串

    Python 中 join() 方法可以将序列中的元素以指定的字符连接生成一个新的字符串.该序列可以是字符串.元组.列表或者字典 join() 方法的语法:'str'.join(sequence),其 ...

  7. 【Python 必会技巧】三元表达式(三目运算符)

    三元表达式是编程中的一个固定格式,一般编程语言的格式为:判段条件 ? 条件为真时的结果 : 条件为假时的结果,举例说明: int A,B,C; A = 1; B = 2; C = A > B ? ...

  8. 【Python 必会技巧】使用 zip() 函数对序列进行压缩和解压操作

    zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同. 利用 * 号操作符,可 ...

  9. 【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

    先举个例子,分别以不指定编码.指定编码为 utf-8.指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比 一.不指定编码方式,直接存入 csv 文件 i ...

最新文章

  1. RabbitMQ (三)消息重试
  2. 别只关注GPT3!细如发丝的模型更具现实杀伤力!
  3. 漂亮图片演示ajax制作教程-lightbox
  4. @开发者,第二届“马栏山杯”国际音视频算法大赛高分攻略请查收,心动大奖等你来战!...
  5. 在Excel中如何利用VBA实现(符合条件)指定(空)行列的批量删除
  6. spark-streaming-连接kafka的两种方式
  7. [蓝桥杯-138译码器和74hc573锁存器的关系]
  8. 《互联网信息服务管理办法》征求意见:违规拟计入信用档案
  9. 常见的状态码1xx、2xx、3xx、4xx、5xx、
  10. Oracle 基本SQL语句
  11. vue中的子传父和父传子
  12. html垂直线性渐变,再说CSS3渐变——线性渐变
  13. 谈谈#define xxxx(x,y) x##y
  14. 那些年,我们一起做过的 Java 课后练习题(66 - 70)
  15. IE8打不开网页提示sysfader错误的解决办法
  16. 政务大数据可视化大屏
  17. 笔记error: expected constructor, destructor, or type conversion before ‘.‘ token
  18. Idea中刷新Git分支列表
  19. openssl 动态库 libcrypto.so 中的 sm2_decrypt sm2_encrypt 是怎么变成内部函数的
  20. 金蝶K/3 wise基础资料界面 复制按钮灰色无法选中的问题

热门文章

  1. 本来中午打算应付下随便吃点,可是连盐都没有放的辣椒炒蛋实在是令人不快...
  2. JavaScript模式读书笔记 第3章 字面量和构造函数
  3. (IOS)截图Demo
  4. Windows修改注册表按键映射
  5. 架构师之路(5)---IoC框架
  6. [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]
  7. [Leedcode][JAVA][第210 题][课程表 II][拓扑排序][BFS][DFS][有向图]
  8. jdbc获取clob图片_jdbc方式读取oracle的clob字段实例
  9. php对话框制作,织梦系统“提示窗口对话框类”详解,oxwindow.class.php、catalog_do.php...
  10. Eclipse export导出war包报错(Module name is invalid.)