测开之数据类型进阶篇・第三篇《推导式》
Posted 七月的小尾巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测开之数据类型进阶篇・第三篇《推导式》相关的知识,希望对你有一定的参考价值。
列表推导式
什么是推导式?
列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。
列表推导式的语法格式如下:
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
推导式代码实现
首先我们先用一分钟想一下,怎么去在列表中新增1-100的数据呢?下面我们来看一下代码的实现
list1 = []
for i in range(1, 101):
list1.append(i)
print(list1)
下面我们使用列表推导式实现列表中新增1-100的数据
list2 = [i for i in range(1, 100)]
其中 for i in range(1, 100)
每一次循环,都会往 i
中加入数据,列表推导式会遍历后面的可迭代对象,然后按照for前的表达式进行运算,生成最终的列表。
很多人会说代码简洁了但可读性降低了,其实不然,当我们对列表推导式熟悉(自己写几次就熟悉了),代码的功能一眼就能轻松地看出来,但是for循环代码基本不可能一眼看完.尤其当创建列表的for循环嵌套在业务逻辑的其他for循环里时,恰恰是使用列表推导式的可读性最高。
推导式的误区
初学者可以这样认为,它只是对 for 循环语句的格式做了一下简单的变形,并用 [] 括起来而已,只不过最大的不同之处在于,列表推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表。
a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)
上面代码的第 3 行会对 a_range 执行迭代,由于 a_range 相当于包含 10 个元素,因此程序生成的 a_list 同样包含 10 个元素,且每个元素都是 a_range 中每个元素的平方(由表达式 x*x 控制)。
运行上面代码,可以看到如下输出结果:
[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]
在列表推导式中添加if语句
我们还可以在列表推导式中添加 if 条件语句,这样列表推导式将只迭代那些符合条件的元素。例如如下代码:
b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)
列表推导式中实现多个循环
另外,以上所看到的列表推导式都只有一个循环,实际上它可使用多个循环,就像嵌套循环一样。例如如下代码:
d_list = [(x, y) for x in range(5) for y in range(4)]
# d_list列表包含20个元素
print(d_list)
也支持类似于三层嵌套的 for 表达式,例如如下代码:
e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]
# e_list列表包含120个元素
print(e_list)
字典推导式
字典推导式实现
上方我们了解了列表推导式,下面来看一下字典推导式的实现,他们的实现方式是一样的。
dict1 = {i: i+1 for i in range(1, 10)}
下面我们来加大难度,将下方字符串以字典推导式的形式定义成字典
cook_str = 'BIDUPSID=3CA9F8; PSTM=1534146048; MCITY=-31080%3A; yjs_duid=1_c2f3f571; BAIDUID=CD8FBB66E5C0'
cook_dict = {i.split('=')[0]: i.split('=')[1] for i in cook_str.split(";")}
以上是关于测开之数据类型进阶篇・第三篇《推导式》的主要内容,如果未能解决你的问题,请参考以下文章