在说函数之前,我把最重要的推导式给忘记说了,不过也还好!咱们还没进入到函数强化内容,所以亡羊补牢为时不晚,所以这里在这里要给大家补充“推导式”的构成和用法!
大家别被这个词给迷惑了,推导式并不是什么有难度的东西,它只是python构建数据的一种简洁的写法而已。
按照平常,我们要准备给一个空列表添加数据的时候,需要通过for循环和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]
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]
看上面两种构建一个有数据的列表,是不是感觉很繁琐?
所以推导式刚好就是用来简化他们的一种写法。
list3 = [i for i in range(10)] # 直接在空列表中,添加接受数据的i变量,然后后面跟上for循环。
print(list3) # 结果 [0,1,2,3,4,5,6,7,8,9]
if判断式列表,其实就是限制取值的条件,然后构建列表!
我们做一个简单的例子。
需求: 需要 一组 只有 0~10 的偶数 数据 的列表!
有三种方法:
list1 = [i for i in range(0,10,2)] # 推导式 range(start,end,step) 开始 结束 步长
print(list1) # 结果 [2,4,6,8]
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]
list3 = [i for i in range(10) if i % 2 == 0] # 推导式 最后面 添加了 一个 if 取余的条件 来筛选 i
print(list3) # 结果 [2,4,6,8]
这个更好理解了,之前我们学过for的嵌套循环,所以推导式也是一样 多加一个for循环,我们来看两种写法:
list1 = []
for i in range(1,3):
for j in range(1,3):
list1.append([i,j])
print(list1)
# 学到这里 代码应该都会看了吧,所以这里我就不解析了
list2 =[[i,j] for i in range(1,3) for j in range(1,3)]
print(list2)
两者有什么区别?区别其实不大,就是简化了写法
然后说万列表推导式后,现在讲解字典推导式,其实就是把数据类型的样式改一下,推导式的写法依旧没啥变化。
dict1 = {i:i**2 for i in range(1,5)} # 中括号变花括号,然后单一临时变量i 变键值对
print(dict1) # 结果 {1: 1, 2: 4, 3: 9, 4: 16}
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)
以上就是推导式的全部内容,相信各位知道怎么写推导式了!那为什么元组没有推导式呢?本来是要问你们的,但是我直接给答案,元组没有添加函数,列表有append() extend() insert() ,字典通过下标键位值,集合通过add() update() 添加数据,所以你明白了吧!