python基础知识-推导式详解

推导式介绍

推导式的范围:只支持 列表,字典,集合 这三个可变类型的序列
作用:1.利用其他可迭代(可遍历)的对象创建一个新的列表,字典,或者集合
2.可对得到的元素进行转换或者筛选。
3. 简化代码
原理:类似for循环

列表推导式

语法

列表推导式语法:
变量名 = [表达式 for 变量 in 可迭代对象] 或者 变量名 = [表达式 for 变量 in 可迭代对象 for 变量 in …]
变量名 = [表达式 for 变量 in 可迭代对象 if 条件]
可迭代对象就是可以遍历的对象,如list列表,set集合,str字符串,tuple元组,dict字典等

执行流程

执行流程:
1.把可迭代对象中遍历出来的内容给变量,然后表达式根据变量值进行逻辑运算。
2.或者先把可迭代对象中遍历出来的内容给变量,然后对这个变量值进行判断,符合的条件的值在给表达式

案例

题目1:将下面list1列表中的每一个元素进行平方后放入到一个新列表中

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


# 先用普通方式1
new_list1 = []      # 声明一个空列表
i = 0
while i < len(list1):
    new_list1.append(i * i)
    i += 1
print(f"题目一的方式一:{new_list1}")


# 用普通方式2
new_list2 = []
for j in list1:
    new_list2.append(j * j)
print(f"题目一的方式二:{new_list2}")


# 使用推导式解题 3         变量名=[表达式 for 变量 in 列表]
new_list3 = [i * i for i in list1]
print(f"题目一的方式三:{new_list3}")
# 在简化一下
print([i * i for i in list1])

# 通过上面的代码发现,while用了6行,for循环4行,而推导式只需一行就可以达到相同的效果

题目2:筛选出list1中的元素是奇数的值,然后放入到一个新列表中

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 普通方式1
new_list4 = []
for j in range(0, len(list1)):
    if j % 2 == 1:
        new_list4.append(j)
print(f"题目二的方式一:{new_list4}")


# 推导式2                  变量名 = [表达式 for 变量 in 列表 if 条件]
new_list5 = [i for i in list1 if i % 2 == 1]
print(f"题目二的方式二:{new_list5}")

题目3:将嵌套列表lis1转换成一个一维列表。

lis1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 普通方式1
new_lis1 = []   # 声明空列表
for i in lis1:  # 嵌套for循环遍历出每个元素
    for j in i:
        new_lis1.append(j)
print(f"题目三的方式一:{new_lis1}")

# 推导式 2             变量名 = [表达式 for 变量 in 列表 for 变量 in  列表]
new_lis2 = [j for i in lis1 for j in i]
print(f"题目三的方式二:{new_lis2}")

# 通过上面的三个题发现,使用推导式会让代码变得更简洁

打印以上结果

题目一的方式一:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
题目一的方式二:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
题目一的方式三:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
-----------------------------------------------------------------------------------
题目二的方式一:[1, 3, 5, 7, 9]
题目二的方式二:[1, 3, 5, 7, 9]
-----------------------------------------------------------------------------------
题目三的方式一:[1, 2, 3, 4, 5, 6, 7, 8, 9]
题目三的方式二:[1, 2, 3, 4, 5, 6, 7, 8, 9]

集合推导式

语法

集合推导式语法:
变量名={表达式 for 变量 in 可迭代对象} 或者 变量名 = {表达式 for 变量 in 可迭代对象 for 变量 in …}
变量名 = {表达式 for 变量 in 可迭代对象 if 条件}

执行流程

集合的推导式与列表的非常相似,唯一区别在于用{}代替[]。而且set集合还有去重的功能

案例

题目1:使用其他序列创建一个新的集合序列

# 集合
set1 = {1, 1, 2, 2, 2, 3, 4, 5, 5, 6, 7}
set2 = {i for i in set1}
print(set2)

# 字符串
str1 = "42314124312"
set3 = {i for i in str1}
print(set3)

# 元组
tup1 = (1, 3, 4, 4, 5, 6, 6, 7)
set4 = {i for i in tup1}
print(set4)

# 列表
list1 = [0, 1, 2, 3, 4, 5, 6, 7]
set5 = {i for i in list1}
print(set5)

# 字典
dict01 = {"k1": "v1", "k2": "v2", "k3": "v3"}
set6 = {i for i in dict01}
print(set6)
# 注意:使用推导式把字典转为新的集合推导式,只有字典的key被转入

打印以上结果

{1, 2, 3, 4, 5, 6, 7}
{'2', '3', '4', '1'}
{1, 3, 4, 5, 6, 7}
{0, 1, 2, 3, 4, 5, 6, 7}
{'k1', 'k3', 'k2'}

字典推导式

语法

字典的推导式:
变量名 = {表达式 for 变量key,变量value in 可迭代对象 …}
变量名 = {表达式 for 变量key,变量value in 可迭代对象 if 条件}

执行流程

字典的推导式也是列表推导式思想的延续,语法相似。

题目1:使用字典推导式创建一个新的字典

# 把字典dict1的元素
dict1 = {"name": "xy", "age": 20, "height": 1.61}

# 普通方法:
dict2 = {}
for k, v in dict1.items():
    dict2[k] = v
print(dict2)

# 推导式:
dict3 = {k: v for k, v in dict1.items()}
print(dict3)

打印以上结果

{'name': 'xy', 'age': 20, 'height': 1.61}
{'name': 'xy', 'age': 20, 'height': 1.61}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值