'''
python 内置map() 和reduce()
map(fn,lsd)
参数:
fn:是一个函数
lsd:集合
功能:将传输的函数fn依次作用到lsd集合中的每个元素,并把结果作为新的Iterator返回
'''
def chr2int(chr):
return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]
ret = map(chr2int,"13586")
print(ret)
print(list(ret))
'''
reduce(fn,lsd)
参数:
fn:函数
lsd:集合
功能:传入的fn 函数作用在lsd集合中,这个fn函数必须接受两个参数,reduce把结果继续和序列的下一个
元素作累计计算
reduce(f,[a,b,c,d]) = f(f(f(a,b),c),d)
'''
#求一个序列的和
from functools import reduce
def func(x,y):
return x+y
res = reduce(func,[1,2,3,4,5,6])
print(res)
#配合map实现str2int
def str2int(s):
def chrToint(chr):
return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]
def f(x,y):
return x*10+y
return reduce(f,map(chrToint,s))
'''
filter(fn,lsd)
参数:
fn:函数
lsd:集合
功能:用于过滤序列,把传入的fn函数依次作用在lsd集合中的每个元素上,
然后根据返回值是True还是False决定是否保留该元素
'''
#去掉列表里的偶数
li1 = [1,2,3,4,5,6,7,8,9]
def fun2(num):
if num%2==0:
return False
return True
res2 = filter(func,li1)
print(li1)
print(res2)
#删除列表中是空字符串的元素
li2=["a",""," ","c","","b"]
def fun5(item):
return item and item.strip()
res = filter(fun5,li2)
print(list(res))
#排序
#升序
li3=[3,4,1,2,5]
li4=sorted(li3)
print(li4)
#按照绝对值大小排序
li5=[3,-4,1,-2,5]
li6=sorted(li5,key=abs)
print(li6)
#降序
li7=sorted(li3,reverse=True)
print(li7)
#字符串大小问题
#原理:获取两个字符串的第一个字符进行比较,谁的ASCII值大那么谁就大,相同就获取下一个
print("a">"b")
#自定义排序逻辑
li8=["abc","awg","agaerger","eherth"]
def fun6(x):
return len(x)
li9=sorted(li8,key=fun6)
print(li9)