【Python 必会技巧】[i for i in range(1,10)] — 列表解析式,列表中使用 for 循环
经常会看到类似于 [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 循环相关推荐
- python序列中各元素之间存在顺序关系_《Python Cookbook(第3版)中文版》——1.10 从序列中移除重复项且保持元素间顺序不变-阿里云开发者社区...
本节书摘来自异步社区<Python Cookbook(第3版)中文版>一书中的第1章,第1.10节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节 ...
- 【Python 必会技巧】使用 Python 追加写入 json 文件或更改 json 文件中的值
追加写入 json 文件 有一个 test.json 文件,包含内容如下: {"key_1": "value_1" } 现需要追加写入 json 文件,向其中增 ...
- 【Python 必会技巧】copy 模块中 copy() 与 deepcopy() 函数的区别
Python 中赋值语句不复制对象,而是在目标和对象之间创建绑定关系.对于自身可变或者包含可变项的集合对象,开发者有时会需要生成其副本用于改变操作,进而避免改变原对象.copy 模块提供了通用的浅层复 ...
- 【Python 必会技巧】lambda 表达式(匿名函数)及其在内置函数中的应用
lambda 表达式,又称匿名函数,即,函数没有具体的名称,常用来表示内部仅包含 1 行表达式的函数. 使用 lambda 编写的代码更加简洁紧凑,但是 lambda 函数支持的功能却是十分有限的,目 ...
- 【Python 必会技巧】判断字符串是否为字母/数字/大小写/空白字符/有效标识符/可打印字符
简单来说: str.isalnum():判断所有字符是否都是数字或者字母 str.isalpha():判断所有字符是否都是字母 str.isdigit():判断所有字符是否都是数字 str.islow ...
- 【Python 必会技巧】使用 join() 方法将序列中的元素拼接成字符串
Python 中 join() 方法可以将序列中的元素以指定的字符连接生成一个新的字符串.该序列可以是字符串.元组.列表或者字典 join() 方法的语法:'str'.join(sequence),其 ...
- 【Python 必会技巧】三元表达式(三目运算符)
三元表达式是编程中的一个固定格式,一般编程语言的格式为:判段条件 ? 条件为真时的结果 : 条件为假时的结果,举例说明: int A,B,C; A = 1; B = 2; C = A > B ? ...
- 【Python 必会技巧】使用 zip() 函数对序列进行压缩和解压操作
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同. 利用 * 号操作符,可 ...
- 【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
先举个例子,分别以不指定编码.指定编码为 utf-8.指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比 一.不指定编码方式,直接存入 csv 文件 i ...
最新文章
- RabbitMQ (三)消息重试
- 别只关注GPT3!细如发丝的模型更具现实杀伤力!
- 漂亮图片演示ajax制作教程-lightbox
- @开发者,第二届“马栏山杯”国际音视频算法大赛高分攻略请查收,心动大奖等你来战!...
- 在Excel中如何利用VBA实现(符合条件)指定(空)行列的批量删除
- spark-streaming-连接kafka的两种方式
- [蓝桥杯-138译码器和74hc573锁存器的关系]
- 《互联网信息服务管理办法》征求意见:违规拟计入信用档案
- 常见的状态码1xx、2xx、3xx、4xx、5xx、
- Oracle 基本SQL语句
- vue中的子传父和父传子
- html垂直线性渐变,再说CSS3渐变——线性渐变
- 谈谈#define xxxx(x,y) x##y
- 那些年,我们一起做过的 Java 课后练习题(66 - 70)
- IE8打不开网页提示sysfader错误的解决办法
- 政务大数据可视化大屏
- 笔记error: expected constructor, destructor, or type conversion before ‘.‘ token
- Idea中刷新Git分支列表
- openssl 动态库 libcrypto.so 中的 sm2_decrypt sm2_encrypt 是怎么变成内部函数的
- 金蝶K/3 wise基础资料界面 复制按钮灰色无法选中的问题
热门文章
- 本来中午打算应付下随便吃点,可是连盐都没有放的辣椒炒蛋实在是令人不快...
- JavaScript模式读书笔记 第3章 字面量和构造函数
- (IOS)截图Demo
- Windows修改注册表按键映射
- 架构师之路(5)---IoC框架
- [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]
- [Leedcode][JAVA][第210 题][课程表 II][拓扑排序][BFS][DFS][有向图]
- jdbc获取clob图片_jdbc方式读取oracle的clob字段实例
- php对话框制作,织梦系统“提示窗口对话框类”详解,oxwindow.class.php、catalog_do.php...
- Eclipse export导出war包报错(Module name is invalid.)