千家信息网

Python解析式有哪些

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,本篇内容介绍了"Python解析式有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python解
千家信息网最后更新 2024年11月19日Python解析式有哪些

本篇内容介绍了"Python解析式有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Python解析式

在python中经常能够看到形如ret = [x ** 2 for x in lst]这样的赋值语句,对于从C++转到python的人不太容易理解这种for循环的使用,这就是python为了简洁而发明的新语法。python解析式有以下优点:

  • 代码简洁,可读性强

  • 效率比普通迭代稍高

python的解析式具体分为以下四种:

  • 列表解析式

  • 生成器解析式

  • 集合解析式

  • 字典解析式

下面分别介绍这四种解析式的使用。

列表解析式

列表解析式的形式

  • [expr for e in iterator]

In [1]: lst = range(10)In [2]: %%timeit   ...: ret = [x ** 2 for x in lst]   ...: 100000 loops, best of 3: 5.28 µs per loopIn [3]: %%timeit   ...: ret = []   ...: for x in lst:   ...:     ret.append(x ** 2)   ...: 100000 loops, best of 3: 6.09 µs per loop       # 耗时稍高

可以发现效率是要稍高一点,最主要的还是代码简洁。

列表解析式可以和if语句一起使用

例如筛选出列表lst中的偶数:

In [4]: ret = []In [5]: for x in lst:   ...:     if x % 2 == 0:   ...:         ret.append(x)       # 使用for循环   ...:         In [6]: retOut[6]: [0, 2, 4, 6, 8]In [7]: ret = [x for x in lst if x % 2 == 0]      # 使用列表解析式In [8]: retOut[8]: [0, 2, 4, 6, 8]

列表解析式可以像for循环一样使用if语句。

  • 带多个if语句的,都可以转化为条件的逻辑运算, 所以一般来说,不会带多个if语句

列表解析式的for语句可以嵌套。

In [9]: (x, y) for x in range(0, 5) for y in range(5, 10)  File "", line 1    (x, y) for x in range(0, 5) for y in range(5, 10)             ^SyntaxError: invalid syntax# 说明列表解析式一定要使用中括号括起来In [10]: [(x, y) for x in range(5) for y in range(5, 10)]Out[10]: [(0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9)]In [11]: ret = []In [12]: for x in range(5):    ...:     for y in range(5, 10):    ...:         ret.append((x, y))    ...:         In [13]: retOut[13]: [(0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9)]

if语句的特殊用法

单行if语句的写法和列表解析式很像。

表达式形式:x if cond else y

if和else必须同时存在。

下面以偶数求平方,奇数求立方为例进行演示

In [14]: ret = []In [15]: for x in lst:    ...:     if x % 2 == 0:    ...:         ret.append(x ** 2)    ...:     else:    ...:         ret.append(x ** 3)    ...:         In [16]: retOut[16]: [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]In [17]: x = 3# if特殊用法In [18]: x ** 2 if x % 2 == 0 else x ** 3Out[18]: 27In [19]: 3 if True else 4Out[19]: 3# 如果采用if特殊用法配合列表解析式 x if cond else y for ...In [20]: [x ** 2 if x % 2 == 0 else x ** 3 for x in lst]Out[20]: [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]

生成器解析式

列表解析式返回的是一个列表,而生成器解析式返回的是一个解析式。列表解析式的中括号变成小括号就是生成器解析式了

In [1]: range(10000)Out[1]: range(0, 10000)In [2]: g = (x ** 2 for x in range(100000000000))In [3]: gOut[3]:  at 0x7f9f08a5f0a0>In [4]: next(g)Out[4]: 0In [5]: next(g)Out[5]: 1In [6]: next(g)Out[6]: 4

列表解析式和生成器解析式的选择

  • 需要用下标访问的时候,用列表解析式

  • 只需要对结果迭代的时候,优先使用生成器解析式

集合解析式

将列表解析式的中括号换成大括号就是集合解析式了。

In [1]: lst = [2, 4, 5, 6, 3, 4, 2]In [2]: s = {x for x in lst}In [3]: sOut[3]: {2, 3, 4, 5, 6}        # 可见列表解析式生成的时候会去掉重复,符合集合要求In [4]: type(s)Out[4]: set

字典解析式

字典解析式使用的也是大括号,但是和集合解析式不同的是在expr处使用的不是单个元素而是k,v对。

In [1]: {str(x): x for x in range(5)}Out[1]: {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4}

这四种解析式中使用最广泛的还是列表解析式,会经常有一些很巧妙的用法。

"Python解析式有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

语句 生成 生成器 特殊 简洁 字典 就是 括号 时候 中括号 循环 代码 偶数 内容 多个 形式 更多 知识 还是 迭代 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 免费为酒店提供大数据库 中央网络安全和信息化主任 上海地铁软件开发待遇 服务器安全狗管理版本 智能网络技术咨询参考价格 长沙万度网络技术有限公司 网络安全我参与图画简单 如何在网易服务器开创造 网络安全审查时间什么时候结束 承接嵌入式系统的硬件软件开发 地下城堡服务器大区 马云数据库基地在哪里 深圳爱有网络技术 深圳橙大网络技术 个人隐私信息网络安全 罗湖网络安全建设 数据库动态脱敏技术 真实的深度学习服务器 思科网络技术学院题答案 南京公路管理软件开发 网络安全基础工具 青浦区网络软件开发信息中心 高科技微电影互联网 北京华大科技互联网学校 网站的数据库概念结构设计怎么写 ftp显示不安全的服务器 网络安全个人隐私的小说 健康码是什么数据库技术 楚雄彝族自治州互联网科技怎样 确保网络安全什么原则
0