python常用内置函数filter、map、reduce、apply、zip,enumerate,sorted以及列表解析

讲述常用内置函数之前,先介绍一个知识点:匿名函数lambda

lambda函数:

讲究抛弃变量和状态,与标准方式声明的函数区别在于:不需要使用def语句,也不需要一个名字来引用它,起到函数速写的作用(通常只需要使用一次的函数,就可以用lambda表达式替代)。

语法:
lambda arg : operation(arg)  #operation相当于函数中的return函数
例子:
func = lambda x,y,z:x+y+z
func(1,2,3)

lambda函数因为其简洁的表达式形式经常与python的内置函数一起使用。

filter函数:返回一个可迭代对象

主要用于过滤与函数func()不匹配的值,func为None时直接过滤掉为False的值。

语法:
filter(func,sequence)

调用一个布尔函数func来迭代sequence中的每个元素,若元素经够func返回True值则保存,返回False值则丢弃,最后返回一个布尔值皆为True的过滤后的序列。

例子:

过滤得到以2013结尾的日期

date = ['11/2/2013','1/3/2012','3/6/2013','2/1/2012','9/8/2014']
list(filter(lambda x: x.endswith('2013'),date))
列表解析替代filter函数:
[x for x in [1,2,3,4] if x>2]# filter
[3, 4]
map函数:返回一个可迭代对象

将函数 func 作用于 sequence 被迭代的每一个元素,返回一个列表。sequence可以为多个。如果func为None的话,返回一个序列的列表或者多个序列的组合列表。sequence也可放在map前面,如df['column'].map(lambda x:x+1)

例子:
list(map(lambda x,y: x+y if y else x+10,[1,2,3,4,5],(1,2,3,4)) )
[2, 4, 6, 8, 15]

list(map(None,[1,2,3,4,5],(1,2))) #如果是None的话,以None来补齐短序列造成的空缺 
[(1, 1), (2, 2), (3, None), (4, None), (5, None)]
列表解析替代map函数:
[x+1 for x in [1,2,3]]# map
[2, 3, 4]
reduce函数:

reduce() 函数在 Python3 中已经不是内建函数了,想要使用的话需要 from functools import reduce。
func为一个二元函数,只能接受两个参数(否则报错),第一个是 initial,第二个是 sequence 的第一个元素。如果没有提供 initial ,那么就取前两个 sequence 的元素。然后这次调用的返回值再作为第一个参数传递给 function,第二个参数则是 sequence 的下一个元素。这样循环直到 sequence 耗尽,并将最终的值返回。func为None时报错。

例子:
 reduce(lambda x,y: x+y, [47,11,42,13])
 113
apply函数:

当想让方程作用在一维的向量上时,可以使用apply来完成。

df.apply(func,axis=1)//axis默认为0,表示对df的每一行使用func函数
df.apply(lambda x : x+1)//apply函数与lambda函数的组合使用,通常适用于对结果形式没有其他要求的,简化的一维向量的处理,后面可以加.tolist()来将结果转化为列表
applymap函数:

如果想让func作用于DataFrame中的每一个元素,可以使用applymap()

总的来说就是apply()是一种让函数作用于列或者行操作,applymap()是一种让函数作用于DataFrame每一个元素的操作,而map是一种让函数作用于Series每一个元素的操作

zip函数:返回一个可迭代对象

接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度等于参数中长度最短的对象的长度。

x=(1,2,3); y=(4,5);z=(6,)
list(zip(x,y,z))

[(1, 4, 6)]
enumerate函数:返回一个可迭代对象

得到一个元素(index,value)元组的可迭代对象,可迭代对象不可以直接输出,需要转为列表之后输出。

s='abc'
list(enumerate(s))

输出:

[(0,'a'),(1,'b'),(2,'c')]
sorted函数:返回一个真正的列表
nums = [4,9,3,2,1,5,6,8,7]
sorted(nums)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表解析:

当我们考虑在一个序列的每一项上执行一个操作时,可以考虑使用列表解析。
列表解析比手动的for循环运行速度往往会快一倍,因为迭代在解释器内部以C语言的速度执行。
集合解析和字典解析同列表解析。

lines = [line.rstrip() for line in open('script.py')]
[x+y for x in [0,1,2] for y in [1,2,3]]//嵌套循环语句
[x+1 for x in [1,2,3] if x>1]//循环+条件过滤
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值