python之路 ---列表/字典生成式及匿名函式
阿新 • • 發佈:2019-01-01
列表解析:
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'