文章目录
1、推导式的作用
我们都知道,python的代码以简洁而闻名,而推导式的作用就是简化代码,以下面的需求为例:
需求:创建一个列表[1, 3, 5, 7, 9]
不用列表推导式的代码是这样的
lst = []
for i in range(1, 10, 2):
lst.append(i)
print(lst)
而我们用列表推导式的代码是这样的
lst = [i for i in range(1, 10, 2)]
print(lst)
由此可见,推导式能帮我们大大减少代码量
说明,接下来的推导式我们都会建立在一个需求的基础上讲解,以便大家更好的理解
2、列表推导式
2.1、作用
⽤⼀个表达式创建⼀个有规律的列表或控制⼀个有规律列表。因此列表推导式又叫做列表生成式
2.2、普通的列表推导式
需求1:用列表推导式创建一个含有100个0的列表
lst = [0 for i in raneg(100)]
print(lst)
因此,我们可以用列表推导式初始化一个列表
需求2:创建一个列表,里面含有的元素为0到9,(0到9每个数字都是字符串类型)
lst = [str(i) for i in range(10)]
print(lst)
2.3、带if的列表推导式
需求3:创建一个列表,里面的元素为1到100中2和3的倍数
下面给出用列表推导式和不用列表推导式的两种代码
# 不用列表推导式
lst1 = []
for i in range(1, 101):
if i % 2 == 0 and i % 3 == 0:
lst1.append(i)
print(lst1)
# 用列表推导式
lst2 = [i for i in range(1, 101) if i % 2 == 0 and i % 3 == 0]
print(lst2)
运行结果
[6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]
[6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]
2.4、多个for循环实现列表推导式
需求:创建这样一个列表[(2, 1), (3, 1), (4, 1), (2, 2), (3, 2), (4, 2)]
# 不用列表推导式
lst1 = []
for i in range(1, 3):
for j in range(2, 5):
lst1.append((j, i))
print(lst1)
# 用列表推导式
lst2 = [(j, i) for i in range(1, 3) for j in range(2, 5)]
print(lst2)
运行结果
[(2, 1), (3, 1), (4, 1), (2, 2), (3, 2), (4, 2)]
[(2, 1), (3, 1), (4, 1), (2, 2), (3, 2), (4, 2)]
2.5、多个for循环且带if的列表推导式
需求:创建一个这样的列表,里面的元素为(a, b),其中a,b都是0到4的数字,且b能被a整除
# 不用列表推导式
lst1 = []
for i in range(5):
for j in range(5):
if i != 0 and i != 1 and j % i == 0:
lst1.append((i, j))
print(lst1)
# 用列表推导式
lst2 = [(i, j) for i in range(5) for j in range(5) if i != 0 and i != 1 and j % i == 0]
print(lst2)
运行结果
[(2, 0), (2, 2), (2, 4), (3, 0), (3, 3), (4, 0), (4, 4)]
[(2, 0), (2, 2), (2, 4), (3, 0), (3, 3), (4, 0), (4, 4)]
3、字典推导式
3.1、作用
快速合并列表为字典或提取字典中⽬标数据
3.2、快速体验
需求1: 创建⼀个字典:字典key是1-5数字,value是这个数字的3次⽅。
dict1 = {i: i ** 3 for i in range(1, 6)}
print(dict1)
运行结果
{1: 1, 2: 8, 3: 27, 4: 64, 5: 125}
3.3、将两个列表合并为1个字典
需求2:将
list1 = [‘name’, ‘age’, ‘gender’]
list2 = [‘Tom’, 20, ‘man’]
这两个列表合并为一个字典
将两个列表合并为1个字典,我们可以用zip函数将它们打包,然后再转为字典,也可以使用字典推导式实现
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'man']
# 使用zip
dict1 = dict(zip(list1, list2))
print(dict1)
# 使用字典推导式
dict2 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict2)
运行结果
{'name': 'Tom', 'age': 20, 'gender': 'man'}
{'name': 'Tom', 'age': 20, 'gender': 'man'}
在这里我们需要注意的是,len里面的序列必须是两个序列中短的一个,且两个序列中的元素有着对应的关系,否则字典推导式的结果将会报错或者毫无意义
3.4、提取字典中目标数据
需求3:提取字典{‘MBP’: 268, ‘HP’: 125, ‘DELL’: 201, ‘Lenovo’: 199, ‘acer’: 99}中电脑数量⼤于等于200的字典数据
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
dict1 = {key: value for key, value in counts.items() if value >= 200}
print(dict1)
运行结果
{'MBP': 268, 'DELL': 201}
4、集合推导式
集合推导式在我们实际运用中其实并不是很常用,但在集合推导式中,我们需要注意集合有数据去重功能
需求:创建⼀个集合,数据为下⽅列表的2次⽅。
[-2, -1, 0, 1, 2, 3]
lst1 = [-2, -1, 0, 1, 2, 3]
set1 = {i ** 2 for i in lst1}
print(set1)
运行结果
{0, 1, 4, 9}