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