内建函数之 sorted filter map zip

Posted zoer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内建函数之 sorted filter map zip相关的知识,希望对你有一定的参考价值。

内建函数

sorted

sorted(iterable,*,key=None,reverse=False)
返回一个 新已排序的列表
key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。 默认值为 None (直接比较元素)
reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序。

基本排序
>>>sorted({0: 0, 3: 1, 5: 2, 9: 3, 2: 4})
[0, 2, 3, 5, 9]

如果iterable 是字典,则默认以key进行排序

关键函数

key 形参的值应该是一个函数,它接受一个参数并并返回一个用于排序的键。这种技巧速度很快,因为对于每个输入记录只会调用一次 key 函数。

>>>students_tuples = [(‘john‘, ‘A‘, 15),(‘jane‘, ‘B‘, 12),(‘dave‘, ‘B‘, 10),]
>>>sorted(students_tuples,key=lambda x:x[2],reverse=True)   #key为一个lambda函数,迭代接收iterable中的元素作为实参传给形参x,lambda函数返回x[2]值用于排序
[(‘john‘, ‘A‘, 15), (‘jane‘, ‘B‘, 12), (‘dave‘, ‘B‘, 10)] 

对于类对象,也可以使用对象的属性作为key的返回值

operator函数模块
>>>from operator import itemgetter,attrgetter
>>>sorted(students_tuples,key=itemgetter(2))
[(‘dave‘, ‘B‘, 10), (‘jane‘, ‘B‘, 12), (‘john‘, ‘A‘, 15)]

key = itemgetter(2) 等同于 key = lambda x:x[2] ,更简单、快捷
Operator 模块功能允许多级排序。例如,先根据索引位1,再根据索引位2
>>>sorted(students_tuples,key=itemgetter(1,2))
[(‘john‘, ‘A‘, 15), (‘dave‘, ‘B‘, 10), (‘jane‘, ‘B‘, 12)] #先做A、B排序,再在B的基础上做int排序

filter

filter(function, iterable),返回一个新的迭代器
函数 function 用 iterable 中的元素遍历,function 返回真的那些元素,构建一个新的迭代器

>>>list(filter(lambda x : x % 3 ==0,range(10)))  #lambda函数用range(10)中的元素作为参数遍历,取余为零函数返回值为True,则filter返回这些元素的迭代器
[0, 3, 6, 9]  

如果 function 是 None ,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。
>>>list(filter(None,range(5)))
[1, 2, 3, 4]

map

map(function, iterable, ...)
返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器

>>>dict(map(lambda x:(str(x+1),x+1),range(5))) #lambda函数对iterable重新构造,并返回一个迭代器  
{‘1‘: 1, ‘2‘: 2, ‘3‘: 3, ‘4‘: 4, ‘5‘: 5}

如果传入了额外的 iterable 参数,function 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项

>>>list(map(lambda x,y:(x+1,y+1),range(5),range(5)))
[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]

当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束

>>>list(map(lambda x,y:(x+1,y+1),range(5),range(10)))
[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]

zip

zip(*iterables)
创建一个聚合了来自每个可迭代对象中的元素的迭代器

>>>list(zip(range(10),range(10),range(10)))
[(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9)]

zip与map结合使用生成一个字典

>>>dict(zip(map(lambda x : str(x+1),range(10)),range(10)))
>>>{str(x+1):y for x,y in zip(range(10),range(10))}
{‘1‘: 0, ‘2‘: 1, ‘3‘: 2, ‘4‘: 3, ‘5‘: 4, ‘6‘: 5, ‘7‘: 6, ‘8‘: 7, ‘9‘: 8, ‘10‘: 9}











以上是关于内建函数之 sorted filter map zip的主要内容,如果未能解决你的问题,请参考以下文章

廖雪峰老师python教程——filter/sorted

python基础之map/reduce/filter/sorted

(转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

JS之JQ的map/reduce/filter/sort/reverse

JavaScript高阶函数 map reduce filter sort