Python笔记01:sort min/max map/filter/reduce 列表解析 详解

来源:互联网 发布:怎么样做好网络推广 编辑:程序博客网 时间:2024/05/29 16:00

1、sorted(iterable[, cmp[, key[, reverse]]])

cmp:用于对比函数用于比较迭代对象中的元素的大小。我们在这里暂且不讨论sort函数用的是哪种排序(其实sort还是挺智能的,会根据不同的数据选择合适的排序算法),在排序过程中都需要对元素进行大小比较,这时便会调用cmp这个参数所提供的函数,如果不提供比较函数的话,python默认使用的是内建函数cmp(),对于cmp(x,y),if x>y,return 1,x<y,return -1,x=y,return 0.根据cmp函数的返回值作为排序标准。我们可以重新定义他的比较函数,是他规则变化,比如(实现逆序):

def mycmp(x,y):

return y-x

#我们没有把return的结果定义成-1,1,0,因为sort是要通过>0,<0<,=0来进行判断的,所以不必定义成return -1,1,0

#引用函数时不要加括号即sorted(iterable,cmp=mycmp)而不是sorted(iterable,cmp=mycmp())

key:相当于对可迭代对象iterable每个元素的预处理。iterable=[obj1,obj2,obj3] ,通过cmp(key_fun(obj_m),key_func(obj_n))的结果进行排序,如果key=None,则通过cmp(obj_m,obj_n)进行排序。

比如:sorted([[1,2,3],[2,3,5]],cmp=mycmp,key=lambda x:x[1])即根据[2,3]通过mycmp的结果进行排序

reverse:是否逆序True为逆序

2、min max

max(iterable[, key])

max(arg1, arg2, *args[, key])

例子max([1,2,3])max(1,2,3)key同上

3、map/filter/reduce

这三个函数都用于处理可迭代对象

map:映射,生成一个需输入等长的列表,输入跟输出每个元素通过func一一映射

map(func,iter)      map(lambda x:x+1,[0,1,2])  ->  [1,2,3]

filter:筛选,筛选出func输出为true元素组成列表,func的返回值理论上需要布尔值(其实其他值也行,布尔值易读性更好)

filter(func,iter)       filter(lambda x:True if x>0 else False,[0,1,2])-->[1,2]

reduce(func, iter[, initializer]):func是一个有两个输入和一个输出的函数类似于 def func(x,y):return onlyone reduce函数从左到右执行func

比如reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5)。 initializer是可选的初始化函数,是初始化最后的reduce输出的,比如上述的例子中,改为reduce(lambda x, y: x+y, [1, 2, 3, 4, 5],initializer=100) calculates(100+ ((((1+2)+3)+4)+5))

reduce(lambda x, y: x+y, [1, 2, 3],initializer=100)=106等价于下面的函数:

def myreduce(List):

init=100

for i in List:

init+=i

return init

myreduce([1,2,3])=106

3、列表解析

主要是用来将可迭代对象生成列表

我们可以用列表解析实现上述几个函数的功能(列表解析挺好用的)

列表解析实现map:

print [i+1 for i in [1,2,3]] -> [2,3,4]

列表解析实现filter:

print [i for i in range(3) if i >0] ->[2,3]

reduce:这个没有想到好的实现,如果您有欢迎回复本博客


 

0 0
原创粉丝点击