列表解析:
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'