map zip filter sorted reduce

1 map

map(func,iter)
通过映射,将iter中的各个元素分别传入func进行处理
得到一个迭代器,里面为各个处理结果(func返回值)


l=['a','b','c']
s=map(a,l)
print(type(s))
print(s.__next__())
print(s.__next__())
print(s.__next__())



<class 'map'>
A
B
C

2 zip

zip(iter1,iter2)
将多个iter中的元素一一对应并放入同一个元组,形式为:(element1_iter1,element1_iter2)
函数结果为迭代器,无对应的数据直接忽略



l=['a','b','c']
l2=['c','d','e']
z=zip(l,l2)
print(next(z))
print(next(z))
print(next(z))


('a', 'c')
('b', 'd')
('c', 'e')

3 filter

filter(func,iter)
将iter中的各个元素传入func进行处理,收集处理后func返回值为True的元素
得到的结果是迭代器,里面为筛选通过的元素



def b(x):
    if x.startswith('a'):
        return 1

f=filter(b,l)
print(f)
print(list(f))


<filter object at 0x00000203A6B686D0>
['a']

4 sorted

sorted(iter,key=func,reverse=False)
将iter中的元素一个个取出,传入func进行处理,得到func返回值,以该返回值的大小为依据进行排序,按顺序放入列表
得到结果为列表,reverse=False时为升序,否则为降序


d={'1':23,'2':53,'3':44}
def c(x):
    return d[x]

s = sorted(d,key=c)
print(s)




['1', '3', '2']

salaries={
    'siry':3000,
    'tom':7000,
    'lili':10000,
    'jack':2000
}
res=sorted(salaries,key=lambda k:salaries[k],reverse=True)
print(res)


['lili', 'tom', 'siry', 'jack']

5 reduce

reduce(func,iter,default_value)
func需要2个形参

将iter的第一第二个元素传入func,得到返回结果res1,将res1与第三个元素传入func,得到结果res2,将res2与第四个元素传入func..........
default_value是初始值



from functools import reduce	# python 3中需导入,python2可以直接使用reduce()
res=reduce(lambda x,y:x+y,[1,2,3],10) # 可以设定初始值:10
print(res)
# 16

res=reduce(lambda x,y:x+y,['a','b','c']) 
print(res)
# abc

 posted on 2020-05-13 15:20  wwwpy  阅读(102)  评论(0编辑  收藏  举报