码迷,mamicode.com
首页 > 其他好文 > 详细

内建函数之 sorted filter map zip

时间:2020-06-27 16:11:27      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:顺序   map   sort   输入   als   属性   反向   遍历   operator   

内建函数

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

标签:顺序   map   sort   输入   als   属性   反向   遍历   operator   

原文地址:https://www.cnblogs.com/zoer/p/13198524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!