一小时学会Python3爬虫基础(九)什么是推导式?三分钟简单理解

目录

    • 前言
    • 推导式
      • 列表推导式
      • if判断推导式
      • for循环嵌套推导式
      • 字典推导式
      • 集合推导式
    • 总结

前言

在说函数之前,我把最重要的推导式给忘记说了,不过也还好!咱们还没进入到函数强化内容,所以亡羊补牢为时不晚,所以这里在这里要给大家补充“推导式”的构成和用法!

推导式

大家别被这个词给迷惑了,推导式并不是什么有难度的东西,它只是python构建数据的一种简洁的写法而已。

列表推导式

按照平常,我们要准备给一个空列表添加数据的时候,需要通过for循环和while循环来操作。

  1. while循环列表
list1 = []  		# 准备一个空列表
i = 0				# 定义i变量为0
while i < 10:  		# 进行判断循环 i < 10时,循环成立
	list1.append(i) # i每次循环都会被添加到列表中
	i += 1			# 避免死循环, i 必须累积
print(list1) 		# 最后得到 循环后的 列表 [0,1,2,3,4,5,6,7,8,9]
  1. for循环列表
list2 = [] # 准备一个空列表
for i in range(10):  	# 循环range()函数,临时变量i取 0~10范围之内的值。
    list2.append(i) 	#  临时变量i 逐一被添加到 列表中
print(list2) 			# 结果 [0,1,2,3,4,5,6,7,8,9]

看上面两种构建一个有数据的列表,是不是感觉很繁琐?
所以推导式刚好就是用来简化他们的一种写法。

  1. 推导式列表
list3 = [i for i in range(10)] # 直接在空列表中,添加接受数据的i变量,然后后面跟上for循环。
print(list3)  					# 结果 [0,1,2,3,4,5,6,7,8,9]

if判断推导式

if判断式列表,其实就是限制取值的条件,然后构建列表!
我们做一个简单的例子。
需求: 需要 一组 只有 0~10 的偶数 数据 的列表!

有三种方法:

  1. range() 函数 控制步数为2
list1 = [i for i in range(0,10,2)] # 推导式 range(start,end,step) 开始 结束 步长
print(list1) # 结果 [2,4,6,8]
  1. for 循环增加if 判断 i % 2 == 0;的取余方式
list2 = [] # 创建空列表
for i in range(10): #  临时变量 i 取值 范围 0 ~ 10
    if i % 2 == 0: # 判断 0 ~ 10 的 那些数  余数为0 就为偶数
        list2.append(i) # 把符合条件的 i 添加到列表中
print(list2) # 结果 [2,4,6,8]
  1. 推导式if判断
list3 = [i for i in range(10) if i % 2 == 0] # 推导式 最后面 添加了 一个 if 取余的条件 来筛选 i 
print(list3) # 结果 [2,4,6,8]

for循环嵌套推导式

这个更好理解了,之前我们学过for的嵌套循环,所以推导式也是一样 多加一个for循环,我们来看两种写法:

  1. for循环叠加
list1 = []	
for i in range(1,3):
    for j in range(1,3):
        list1.append([i,j])
print(list1)
# 学到这里 代码应该都会看了吧,所以这里我就不解析了
  1. for循环推导式
list2 =[[i,j] for i in range(1,3) for j in range(1,3)]
print(list2)

两者有什么区别?区别其实不大,就是简化了写法

字典推导式

然后说万列表推导式后,现在讲解字典推导式,其实就是把数据类型的样式改一下,推导式的写法依旧没啥变化。

  1. 示例代码
dict1 = {i:i**2 for i in range(1,5)} # 中括号变花括号,然后单一临时变量i 变键值对
print(dict1) # 结果 {1: 1, 2: 4, 3: 9, 4: 16}
  1. 示例代码
list1 = ['name','age','gender']
list2 = ['Tom',20,'man'] # 准备两个列表
dict2 = {list1[i]:list2[i] for i in range(len(list1))} # 判断其中一个列表的长度,然后使用 range进行取数,然后通过下标方式,把两个列表的值选出来,进行键位配对
print(dict2) # 结果 {'name': 'Tom', 'age': 20, 'gender': 'man'}

以上的代码看的很明白了吧

集合推导式

然后到了集合推导式,上面的都学会了,集合推导式也是差不多的操作,只不过要注意是,集合是具备去重复功能,所以有的值被添加,如果发现重复就不会被放进集合。

示例代码

list1 = [1,1,2]

set1 = {i**2 for i in list1}
print(set1)

总结

一小时学会Python3爬虫基础(九)什么是推导式?三分钟简单理解_第1张图片

以上就是推导式的全部内容,相信各位知道怎么写推导式了!那为什么元组没有推导式呢?本来是要问你们的,但是我直接给答案,元组没有添加函数,列表有append() extend() insert() ,字典通过下标键位值,集合通过add() update() 添加数据,所以你明白了吧!

你可能感兴趣的:(摸鱼时间学Python基础,列表,python,java,机器学习,数据分析)