这里介绍Python中的推导式

Comprehension推导式
Python中的Comprehension推导式,是一种快速将某种类型的数据容器构建为指定类型数据容器的方法
列表推导式
列表推导式用于构建列表,语法如下。具体地,其会遍历可迭代对象,对满足条件的元素,将其传入表达式计算新值,并作为新列表的元素
[表达式 for 变量 in 可迭代对象 if 条件]
print("-------------- 列表推导式 --------------------")
names1 = ['Bob','Tom','alice','Jerry','Wendy','Smith']
# 对于长度超过3的名字,将其转换为大写, 并将结果存放到新列表中
names2 = [ name.upper() for name in names1 if len(name)>3 ]
print(f"names2: {names2}" )
# if 条件不是必须的
square_nums = [ x*x for x in range(6) ]
print( f"square nums: {square_nums}" )
# 可以拥有多个for语句
points1 = [ (x,y) for x in range(2) for y in range(3) ]
print(f"points1: {points1}" )
# 可以拥有多个if语句。其会在for遍历后紧跟着进行条件判断
# 要求x坐标大于1、y坐标为奇数
points2 = [ (x,y) for x in range(5) for y in range(5) if x>1 if y%2==1 ]
print(f"points2: {points2}" )
# 要求x坐标为偶数、y坐标为奇数
points3 = [ (x,y) for x in range(5) if x%2==0 for y in range(3) if y%2==1 ]
print(f"points3: {points3}" )

集合推导式
集合推导式用于构建集合,语法如下。具体地,遍历可迭代对象,对满足条件的元素,将其传入表达式计算新值,并作为新集合的元素
{表达式 for 变量 in 可迭代对象 if 条件}
print("-------------- 集合推导式 --------------------")
nums1 = (18, 3, 23, 7)
nums2 = {num*3 for num in nums1 if num>10}
print(f"nums2: {nums2}")

字典推导式
字典推导式用于构建字典,语法如下。具体地,遍历可迭代对象,对满足条件的元素,分别传入key表达式、value表达式计算键、值,并作为新字典的键值对
{key表达式:value表达式 for 变量 in 可迭代对象 if 条件}
print("-------------- 字典推导式 --------------------")
companys1 = ['Google','Baidu', 'Taobao']
companys2 = { company:len(company) for company in companys1 }
print(f"companys2: {companys2}")
companys1 = ['Google', 'Baidu', 'Taobao']
companys3 = { company:len(company) for company in companys1 if not company.startswith("B") }
print(f"companys3: {companys3}")
people_info1 = {"Aaron":18, "Bob":23, "Tony": 35}
people_info2 = { v:k for k,v in people_info1.items() }
print(f"people_info2: {people_info2}")

参考文献
-
Python编程·第3版:从入门到实践 Eric Matthes著 -
Python基础教程·第3版 Magnus Lie Hetland著 -
流畅的Python·第1版 Luciano Ramalho著
原文始发于微信公众号(青灯抽丝):Python之Comprehension推导式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/287096.html