Python中推导和匿名函数差不多,下面举个匿名函数的例子
lst=[2, 4, 5, 7, 12]
mysum=map(lambda x:x**2,lst)
for i in mysum:
print(i,end=' ')
》》》4 16 25 49 144
匿名函数只有一行,可以将匿名函数赋值给一个变量来存放这个修改后的列表
还有一种简单的
tan=lambda x:x+1 print(tan(1))
》》》2
看到没有,匿名函数就是这样,将一个匿名函数赋给另一个变量,这个变量就相当于函数了,然后进行传参就行了,其实这和普通函数一样,只是这个函数没有名字而已,所以叫匿名函数。
接下来就是正题了,什么叫推导呢?
其实和匿名函数差不多,
举个简单的列子:
number=[x*x for x in range(1,10)]
print(number)
》》》[1, 4, 9, 16, 25, 36, 49, 64, 81]
先看range里面的值,再来看输出的结果,是不是range里面每个值都平方了
这就是推导,看这个语句是不是和下面这段代码有些相似
for x in range(1,10):
x*x
我们在对比一下,是不是发现前面那段代码先执行x*x后面的语句,得出的值再来进行x*x,
这就和我们平时的循环判断语句一样,只不过缩写了,相当于换了件新衣裳,它还是它
再来举个例子:
names=['tff','tfjyf','tfyhyf','tfjjf','tfyyf']
upperlist=[x.upper() for x in names if len(x)>3]
print(upperlist)
》》》['TFJYF', 'TFYHYF', 'TFJJF', 'TFYYF']
将names里面长度大于3的字符串变为大写,然后存在一个变量里面,
先看代码,先执行for x in names,将names里面的值一个个取出来,然后看if(len(x))>3
判断长度是否大于3,是的话就会执行x.upper(),这样推下来的话是不是和以下代码一样:
names=['tff','tfjyf','tfyhyf','tfjjf','tfyyf']
for x in names:
if len(x)>3:
x.upper()
看,就是这样,先执行后面的判断等一系列条件,通过了就执行最前面的,
以下还有几个简单的列子,别看例子简单,但很容易让先大家知道推导的形式和用法,
# 求m中3,6,9组成的列表 m=[[1,2,3],[4,5,6],[7,8,9]] numlist=[x[2] for x in m ] # 或者 # [m[row][2] for row in (0,1,2)] print(numlist)》》》[3, 6, 9]
好了,看完这个列子是不是觉得推导很简单呢,现在就有朋友要问了,
为什么最外面那层括号一定要中括号,这是不一定的,外面也可用大括号,
那样我们得出的结果就是字典类型了,但不能换成小括号,应为那样就变成迭代了,
有朋友可能不知道迭代,这个可以去百度,也可等小弟下一次写博客再详细介绍迭代,
这里有两个地方很重要,
1.就是最外面那层括号,可以是大括号({ })或者中括号([ ]),但不能是小括号,
2.推导number=[x*x for x in range(1,10)]里面x*x外面也可使用括号,这里不一定是x*x,有的也会是列表,
这样一来得出的结果就是列表嵌套列表,学过C语言或者C++的就知道,这就相当于二维数组,这也是得出结果的一个形式,也可嵌套元组,结果随意,大家可以去试一下,
我也可以给大家示范一遍:
# 快速交换key和Vlure的值 mcase={'a':10,'b':34} dct={vl:k for k,vl in mcase.items()} print(dct)>>>{10: 'a', 34: 'b'}
看到没,最外面那个括号就是外面得出的结果,推导外面是大括号,那么得出的结果不是字典就是集合,
还有最里面那层结果,外面是大括号,里面随便嵌套什么都成,就看你这么写了,好了,推导就说到这,实在不懂的话去百度吧。