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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章