首页 / PYTHON / Python基础-12解析式
Python基础-12解析式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python基础-12解析式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2784字,纯文字阅读大概需要4分钟。
内容图文
12.解析式
? ? 解析式是将一个可迭代对象转换另一个可迭代对象的工具。在Python,容器类型的数据(str,tuple,list,dict,set)都是可迭代对象。
- 第一个可迭代对象:可以是任何容器类型数据
- 第二个可迭代对象:生成的最终类型解析式,常见的列表解析如下所示:
-
- 列表解析式:可迭代对象为list
-
- 集体解析式:可迭代对象为set
-
- 字典解析式:可迭代对象为dict
? ? 先来看看其语法格式如下所示:
# 列表解析式
[item for item in 可迭代对象 if 条件 ]
# 集合解析式
(item for item in 可迭代对象 if 条件 )
# 字典解析式
{item for item in 可迭代对象 if 条件 }
? ? 从语法格式看起来,就是for循环和if的结合体,但却非常简洁。至于最终生成的数据类型,可以根据其定义的格式就可以猜出。
12.1 列表解析式
? ? 先来看看一个需求,将0~10以内的偶数挑选出来,并输出其列表结果。实现方法如下所示:
1.方法1:
- 通过判断是否能与2整除获取
evenList=[]
for item in range(0,11):
if item%2==0:
evenList.append(item)
2.方法2
- 通过控制步长实现
evenList=[]
for item in range(0,11,2):
evenList.append(item)
3.方法3
- 通过列表解析式
[item for item in range(0,11) if item%2==0]
? ? 以上示例的详细示意图如下所示(以不同颜色进行区分):
? ? 在前面学过,for循环是可以进行嵌套的,那多个for循环的是不是也可以使用列表解析式?答案当然是肯定的,下面将演示在给定的路径下递归列出是文件的文件,并以列表的形式返回完整的路径,如下所示:
import os
def getfiles(path):
fileList=[os.path.join(r,f) for r,_,fs in os.walk(path) for f in fs if os.path.isfile(os.path.join(r,f))]
return fileList
12.2 其他解析式
? ? 另外两种解析(集合、字典)与列表解析都一样,只需要注意在定义时的区别即可。
1.字典解析式
# 传统方式
tempDict={}
for k,v in (("a","b"),("c","d"),("e","f"),("g","h")):
if k not in ("g"):
tempDict[k]=v
# 字典解析式
tempDict={k:v for k,v in (("a","b"),("c","d"),("e","f")) if k not in ("g") }
print(tempDict)
2.集合解析式
# 传统方式
tempSet=set()
for item in (1,1,2,3,4,5,6,7,4,6):
if item >=2:
tempSet.add(item)
# 集合解析式
tempSet={item for item in (1,1,2,3,4,5,6,7,4,6) if item >=2 }
3.元组解析式
? ? 严格来讲,官方并没有元组解析式这种说法,如果像列表、字典和集合一样,最终生成的是一个生成器对象,如果要想生成的结果为元组的形式,需要使用函数tuple(),如下所示:
>>> tuple(item for item in (1,1,2,3,4,5,6,7,4,6) if item >=2)
(2, 3, 4, 5, 6, 7, 4, 6)
12.3 与lambda的结合使用
? ? lambda可以做为匿名函数使用,当然也可以与解析结合使用,示例如下所示:
# 将元组拆分为列表
tmpList=(1,2,3,(4,5,6),(7,8),9,((10,20,30),(40,50)))
f=lambda x:[ v for item in x for v in f(item)] if isinstance(x,(tuple,)) else [x]
print(f(tmpList))
输出结果为:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50]
? ? 以上示例是将一个元组拆分为列表形式,元组数据中里面还包含有元组,这需要使用递归。使用lambda表达式和解析式,一行代码就实现,是不是觉得解析很强大?
本文地址:https://www.cnblogs.com/surpassme/p/12983479.html
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
内容总结
以上是互联网集市为您收集整理的Python基础-12解析式全部内容,希望文章能够帮你解决Python基础-12解析式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。