Python 高階函數lambda、map、reduce、filter、zip、sorted等使用

print('****************************************************lambda*************************************************************')
# lambda函數 就是所謂的匿名函數
g = lambda x,y:x + y  # 就是返回x+y的值
print(g(5,3))
g = lambda x,y: x**y
n = 4
test_list = [g(n,i) for i in range(n)]
print(test_list)
print('****************************************************map*************************************************************')

# map 函數 會根據提供的函數對指定序列做映射 第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表
number = [1,2,3,4,5]
mylist = map(lambda x:x+3,number)  # 它返回一個對象
mylist = list(map(lambda x:x+3,number)) # 它卻返回一個列表
print(mylist)
def mydct(str):
    return {'0':0,'1':1,'2':2,'3':3,'4':4}[str]
mylist=['1','2','3']
test=map(mydct,mylist) # 相當於把mylist裏面的字符串當做mydct的參數傳入mydct然後變成一個迭代器 並返回一個可迭代對象
# print(next(test)) * 3
print(list(test))
mybool=map(bool,[1,-5,3,0])  # 將數字變成了bool類型 注意 負數無法轉換爲 False
print(list(mybool))
mystr=map(str,[1,2,3,4,5])
print(str(mystr)) # 輸出是一個對象,
print(list(mystr)) # 正常輸出,這裏需要注意
print('****************************************************reduce*************************************************************')

# reduce 函數 會對參數序列中元素進行累積。它的第一個參數是一個函數,第二個參數是序列類型的對象
from functools import reduce
r = reduce(lambda x,y:x+y,[1,2,3,4,5])
print(r)  # 輸出結果是15,是不是很詫異,它的運算方式是1+2=3,3+3=6,6+4=10,10+5=15
# 再次測試
list1 = [1,2,3,4,5,6,7,8,9]
list2 = [9,8,7,6,5,4,3,2,1]
r2 = map(lambda x,y:x+y,list1,list2)
print(list(r2))
# 這裏我們得出,map是上下運算,reduce是橫着逐個取值運算
# reduce 對列表內字典去重的應用
data_list = [{'a': 1}, {'a': 1}, {'a': 2}]
def run_function(x, y): return x if y in x else x + [y]
print(reduce(run_function, [[], ] + data_list))
print('****************************************************filter*************************************************************')

# filter 函數 用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
number = range(-5,5)
print(list(filter(lambda x:x>0,number)))
print(list(range(5)))
print(list(filter(lambda c :c !='i','zxiasio')))
print('****************************************************zip*************************************************************')

# zip 函數 函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。
colors = ['red','green','blue']
values = [234,12,89,65]
print(list(zip(colors,values))) # 在 Python 3.x 中爲了減少內存,zip() 返回的是一個對象。如需展示列表,需手動 list() 轉換。
for col,val in zip(colors,values): # zip裏面傳入的是可迭代的對象
    print((col,val)) # 注意zip自動進行了匹配,多餘的進行了自動刪除
a = [1,2,3]
b = [4,5,6,7]
print(list(zip(a,b))) # 如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同
a_b = zip(a,b)
print(list(zip(*a_b))) # 利用 * 號操作符,可以將元組解壓爲初始的列表。
print('****************************************************sorted*************************************************************')

# sorted 函數 可以對所有可迭代的對象進行排序操作。
mylist=[9,-5,7,-6,1]
mylist2=sorted(mylist)  #默認將數據變成升序
print(mylist2)
print(sorted(mylist, reverse=True))
mylist2=sorted(mylist,key=abs) #將數據按照絕對值的大小排序
print(mylist2)
mylist=[2,8,6,5,4]
mylist2=sorted(mylist,reverse=True) #將列表排序後再進行反轉 倒序
print(mylist2)
mylist=['asdc','as','asdfg','z']
def mylen(str):
    return len(str)
mylist2=sorted(mylist,key=mylen)#意思就是將列表裏的字符串獲取到長度然後有小到大輸出
print(sorted(mylist,key=lambda str: len(str)))
print(mylist2)
# 實例 對字典排序
need_list = [{'a':2,'b':5},{'a':3,'b':5},{'a':1,'b':5}]
need_list = sorted(need_list, key=lambda my_sort: my_sort['a'])
print(need_list)
發佈了264 篇原創文章 · 獲贊 202 · 訪問量 110萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章