python之推导式

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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值