Python---列表 集合 字典 推导式(本文以 列表 为主)

推导式:

推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列  构建  另一个  新的数据序列(一个有规律的列表或控制一个有规律列表)的结构体。 共有三种推导:列表推导式集合推导式字典推导式

[1, 2, 3] 推导式 [1, 4, 9]

白话:就是把原先分开写的,组合在一起,放一行写。省事。

comprehensions  n.理解,领悟:对某事物的认识和把握。  推导式  推导

序列 :包括    字符串、列表、元组、集合以及字典

使用推导式原因:

案例:创建一个0-9的列表

while循环:

----相关链接Python---循环---while循环-CSDN博客Python--列表及其应用场景---增、删、改、查。-CSDN博客


# 初始化计数器
i = 0
list1 = []
# 编写循环条件
while i <= 9:
    list1.append(i)
   # 更新计数器
    i += 1
print(list1)

for循环:

----相关链接Python-----for循环基本语法及其应用---对序列进行遍历循环--内部会自动更新计数器(类似while循环里面的 i += 1)-CSDN博客

Python----range方法(函数)-CSDN博客

Python--列表及其应用场景---增、删、改、查。-CSDN博客


list1 = []
# 编写for循环
for i in range(0, 10):
    list1.append(i)
print(list1)

思考:

我们能不能把以上代码简化为一行代码搞定这个程序呢?

-------------------使用  推导式

列表 推导式

基本语法:

叫表达式,是因为黄色背景,返回的数据,给表达式,每循环一次,就给表达式一次数据。

有的时候,表达式,可能不单是下面案例中,只要i, 有可能是i % 4  取余,i **2  取平方,所以叫表达式,而不叫变量

Python算术运算符:加减乘除 整除// 取余(取模)% 幂指数** 小括号-CSDN博客


变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]              #  黄色背景色的,是一个部分
变量名 = [表达式 for 变量 in 列表 if 条件]             #  黄色背景色的,是一个部分


案例:定义0-9之间的列表


list1 = []
for i in range(10):
    list1.append(i)
print(list1)

列表推导式


list1 = [i for i in range(10)]
print(list1)

执行原理:[i for i in range(10)]


列表推导式先运行表达式右边的内容:

当第一次遍历时:i = 0,其得到变量i的结果后,会放入最左侧的变量i中,这个时候列表中就是[0]
当第二次遍历时:i = 1,其得到变量i的结果后,会追加最左侧的变量i中,这个时候列表中就是[0, 1]
...
当最后一次遍历时:i = 9,其得到变量i的结果后,会追加最左侧的变量i中,这个时候列表中就是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表  推导式 + if条件判断

使用列表推导式时候,除了可以使用for循环,还可以在其遍历的过程中,引入if条件判断

基本语法:

叫表达式,是因为黄色背景,返回的数据,给表达式,每循环一次,就给表达式一次数据。

有的时候,表达式,可能不单是下面案例中,只要i, 有可能是i %   取余,i **2  取平方,所以叫表达式,而不叫变量

Python算术运算符:加减乘除 整除// 取余(取模)% 幂指数** 小括号-CSDN博客


变量 = [表达式 for 临时变量 in 序列 if 条件判断]

等价于

for 临时变量 in 序列:
    if 条件判断

随机案例:生成0-9之间的偶数(i%2 == 0)序列


list1 = [i for i in range(10) if i % 2 == 0]    # if 条件判断
print(list1)

随机案例:生成0-100之间的偶数(i%2 == 0)的平方 序列


list1 = [i ** 2 for i in range(101) if i % 2 == 0]    # if 条件判断
print(list1)

for循环  嵌套  列表 推导式

for循环嵌套基本语法:


for 临时变量 in range(n):
    for 临时变量 in range(n):

for循环嵌套  列表推导式   基本语法:


变量 = [表达式 for 临时变量 in 序列 for 临时变量 in 序列]  # 蓝色背景是外层,黄色背景是内层

随机案例: 创建列表 => [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

思考:

先看整体,要的是列表,[ ]   创建一个空列表

有小括号,就是元组,元组里数字都是已知固定的,那么就看这些元组中数字的规律。

找规律

1, 0

1, 1

1, 2         # 这三行,左边都是   右边是0到2,就是一个范围,ok,可以试试用range

2, 0

2, 1

2, 2         # 这三行,左边都是   右边是0到2,就是一个范围,ok,可以试试用range

按照原先的for循环,先外层,取左边的 1   2,也就是range(1, 3)。

再取内层的值0   1   2  ,也就是range(0, 3) 。

最后,把取到的元组的两个值,依次追加到元组里面,再把这些元组追加到列表里。

相关链接:

Python-----for循环基本语法及其应用---对序列进行遍历循环--内部会自动更新计数器(类似while循环里面的 i += 1)-CSDN博客

Python----range方法(函数)-CSDN博客

Python---for循环嵌套-CSDN博客

Python--列表及其应用场景---增、删、改、查。-CSDN博客

可以写出下面代码:


list1 = []
# 外层循环
for i in range(1, 3):
    # 内层循环
    for j in range(0, 3):
        tuple1 = (i, j)
        list1.append(tuple1)
print(list1)

转化   列表推导式:

代码:


list1 = [(i, j) for i in range(1, 3) for j in range(0, 3)]
print(list1)

在不太熟悉推导式时候,可以先思考下,把自己之前掌握的,全部罗列出来,想想需求涉及哪些语法,怎么结合以往的知识点解决问题。孰能生巧,心平气和慢慢来,不是谁上来都可以直接一次搞定的。之后再慢慢进行转换为  推导式。不用害怕试错。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唯元素

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值