0%

Python之Comprehension推导式

这里介绍Python中的推导式

abstract.png

Comprehension推导式

Python中的Comprehension推导式,是一种快速将某种类型的数据容器构建为指定类型数据容器的方法

列表推导式

列表推导式用于构建列表,语法如下。具体地,其会遍历可迭代对象,对满足条件的元素,将其传入表达式计算新值,并作为新列表的元素

1
[表达式 for 变量 in 可迭代对象 if 条件]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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}" )

figure 1.png

集合推导式

集合推导式用于构建集合,语法如下。具体地,遍历可迭代对象,对满足条件的元素,将其传入表达式计算新值,并作为新集合的元素

1
{表达式 for 变量 in 可迭代对象 if 条件}
1
2
3
4
print("-------------- 集合推导式 --------------------")
nums1 = (18, 3, 23, 7)
nums2 = {num*3 for num in nums1 if num>10}
print(f"nums2: {nums2}")

figure 2.png

字典推导式

字典推导式用于构建字典,语法如下。具体地,遍历可迭代对象,对满足条件的元素,分别传入key表达式、value表达式计算键、值,并作为新字典的键值对

1
{key表达式:value表达式 for 变量 in 可迭代对象 if 条件}
1
2
3
4
5
6
7
8
9
10
11
12
13
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}")

figure 3.png

参考文献

  1. Python编程·第3版:从入门到实践 Eric Matthes著
  2. Python基础教程·第3版 Magnus Lie Hetland著
  3. 流畅的Python·第1版 Luciano Ramalho著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝