python之路 ---列表/字典生成式及匿名函数

列表解析:

l = ['aaa','bbb','ccc']    #将l内的元素全部变为大写...
L = []
for i in l:
    L.append(i.upper())
print(L) 
#使用列表解析:
L = [i.upper() for i in l]
print(L)
#for之后可以跟个if判断语句(但不能有else)
l = ['aaa','bbb','ccc']
L = [i.upper() for i in l if i.endswith('c')]
print(L)

字典生成式: 

l1 = ['name','age','sex']
l2 = ['bob',23,'men']
d = {key:l2[i] for i,key in enumerate(l1)}
print(d)
--->
#{'name': 'bob', 'age': 23, 'sex': 'men'}
d = {key for i,key in enumerate(l1)}
-->生成的是集合

匿名函数: 

def 函数名() --->创建的是有名函数,使函数名指向函数体的内存地址,因此可以重复调用,而匿名函数,顾名思义函数体是没有与变量名存在绑定关系的

注:1.给匿名函数赋名是没有意义的

       2.匿名函数的参数规则与作用域与有名函数一致

       3.匿名函数的函数体应该是一个表达式,并且该表示式必须有返回值

匿名函数通常与内置函数结合使用:

1.与max():取出一个可迭代对象的最大值

d = {'bob':32,
     'tom':23,
     'lucy':30,}
print(max(d)) 
#---->max首先实现一个类似for循环的功能(迭代器协议),遍历字典的key,按照字符串的原则的比较大小
def func(key):
    return d[key]
print(max(d,key=func))
#--->实现原理是,max对第一参数(可迭代对象)进行for循环,将得到的值作为参数传给函数func,然后以函数func的返回值作为比较依据,
#而func在这里仅仅是提供给内置函数max()使用,所以完全可以将其变成匿名函数
print(max(d,key=lambda x:d[x]))

2.min()的用法与max()类似:取出一个可迭代对象的最小值

3.map():映射:将后面的可迭代对象按照前面的规则映射成新的对象---->在python2中得到的是一个列表,3中则是一个迭代器

#python2
> names = ('1','2','3','4')
>>> res=(map(lambda x:x+'a',names))
>>> print res
['1a', '2a', '3a', '4a']
#python3
names = ('1','2','3','4')
res=(map(lambda x:x+'a',names))
print(res)
print(iter(res) is res)
--->
<map object at 0x032F3290>
True

4:reduce():将多值合并成一个列表  

from functools import reduce
res = reduce(lambda x,y:x+y,range(100))
print(res)
--->
4950

z = ['love','your']
res1 = reduce(lambda x,y:x+' '+y,z,'i')
print(res1)
--->
i love your
#第三个参数为初始值,如果不指定,则在第二个参数中拿出一个作为初始值

5:filter() ---->过滤出为True的  --->python3中生成的是迭代器

l = [1,2,3,4,5,6,7]
res = filter(lambda x:x>3,l)
print(res)
print(list(res))
--->过滤出大于3的数字
<filter object at 0x02F03210>
[4, 5, 6, 7]


d = {'bob':32,
     'tom':23,
     'lucy':30}
print(list(filter(lambda key:d[key]>30,d)))
--->过滤出大于30岁的人
'b0b'

猜你喜欢

转载自blog.csdn.net/ltfdsy/article/details/81358607
今日推荐