python六剑客:map()、lambda()、filter()、reduce()、推导类表、切片

一:map():映射

map()有两个参数,一个函数,一个序列,序列中每一个元素都会做为参数传给前边的函数,然后生成新的列表,

第二个参数必须用一个序列:元祖,列表,字符串

>>> map(str,[1,2,3,4])
[‘1‘, ‘2‘, ‘3‘, ‘4‘]

也可以自己定义函数

搭配lambda函数

>>> map(lambda x:x.upper(),"abc")
[‘A‘, ‘B‘, ‘C‘]

二:lambda匿名函数

lambda语句被用来创建新的函数对象,并且在运行时返回它们。

Python使用lambda关键字来创建匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

lambda只是一个表达式,函数体比def简单很多

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

#如下边例子,x,y,z相当于匿名函数中的参数,x+y+z是函数体,匿名函数的定义赋值给了a,a就是一个函数,可以用a()来调用这个函数

>>> a=lambda x,y,z:x+y+z
>>> a(1,2,3)
6

三:filter()

filter和map的区别是,filter保留函数返回为true的值,不返回的不显示

map是保留返回的结果,无论返回的是啥,filter会把不满足true条件的结果忽略掉

例子:删除字符串中的小写字母

#encoding=utf-8
def delete_lowercase(s):
    if s>=‘a‘ and s<=‘z‘:
        return ""
    else:
        return s

print map(delete_lowercase,"AABBaabb")

print "".join(map(delete_lowercase,"AABBaabb"))

结果:

D:\>python test.py
[‘A‘, ‘A‘, ‘B‘, ‘B‘, ‘‘, ‘‘, ‘‘, ‘‘]
AABB

保留数字中大于5的位

#-*-coding:utf-8-

def func(n):

if int(n)>5:

return n

print filter(func,"123467")

#只要return的是True,就会保留

结果:

D:\>python test.py
67

或者一行搞定

>>> filter(lambda x:int(x)>=5,"12345678")

‘5678‘

filter()根据参数中的序列,返回相同形式的序列,列表返回列表,字符串返回字符串

或者一行搞定

>>> filter(lambda x:int(x)>=5,"12345678")

‘5678‘

>>> filter(lambda x:int(x)>=5,list("12345678"))
[‘5‘, ‘6‘, ‘7‘, ‘8‘]

>>> filter(lambda x:int(x)>=5,"12345678")
‘5678‘

>>> filter(lambda x:int(x)>=5,tuple("12345678"))
(‘5‘, ‘6‘, ‘7‘, ‘8‘)

>>> tuple("12345678")
(‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘)

四:推导列表

>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [i for i in range(10) if i !=5]
[0, 1, 2, 3, 4, 6, 7, 8, 9]

五:reduce()累计操作

Reduce()累计操作,要搭配函数来执行

>>> reduce(lambda x,y:x+y,[1,2,3,4])

10

第一次x=1,y=2, x+y=3,之后x+y的结果3赋值给x,y为3

第二次x=3,y=3,x+y=6,之后x+y的结果6赋值给x,y为4

第三次x=3,y=4,x+y=10

>>> 1:1+2  2:3+3  3:6+4

>>> reduce(lambda
x,y:x+y,range(1,101))

5050

>>> reduce(lambda x,y:x+y,[1,2,3])

6

X=1,y=2

结果3传给x

y从第二次开始存结果

reduce(lambda x,y:x+y+y,[1,2,3])

x=1,y=2,y=2

x=5,y=3,y=3

x+y+y=5+3+3=11

x是5就对了

>>> reduce(lambda
x,y:x+x+y,[1,2,3])

x=1,x=1,y=2

x+x+y=1+1+2=4

x=4,x=4,y=3

x+x+y=4+4+3=11

>>> reduce(lambda
x,y:x+x+y,[‘1‘,‘2‘,‘3‘])

x=1,x=1,y=2

x=’112’,x=’112’,y=’3’

x+x+y=‘1121123‘

六:切片,就是数列的切片,比较基本也比较常用

>>> [1,2,3,4,5][3:5]
[4, 5]

练习:用map,lambda,推到列表,正则,join,去掉字符串中的小写字母

>>> import re
>>> "".join([i for i in map(lambda x:(re.match(r"[A-Z]*",x).group()),"abcABC") if i !=""])
‘ABC‘

拆解过程:

>>> [i for i in map(lambda x:(re.match(r"[A-Z]*",x).group()),"abcABC") if i !=""]
[‘A‘, ‘B‘, ‘C‘]
>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [i for i in range(10) if i !=5]
[0, 1, 2, 3, 4, 6, 7, 8, 9]
>>> map(lambda x:(re.match(r"[A-Z]*",x).group()),"abcABC")
[‘‘, ‘‘, ‘‘, ‘A‘, ‘B‘, ‘C‘]
>>> lambda x:(re.match(r"[A-Z]*",x).group())("abcABC")
<function <lambda> at 0x00000000054EDB38>
>>> re.match(r"[A-Z]*","ABC").group()
‘ABC‘

练习:统计字符串中一共有几个数字

s="sdfa45ads46723"

#lambda

>>> filter(lambda x:x.isdigit(),list(s))

[‘4‘, ‘5‘, ‘4‘, ‘6‘, ‘7‘, ‘2‘, ‘3‘]

>>> len(filter(lambda x:x.isdigit(),list(s)))

7

>>> reduce(lambda x,y:x+y,map(lambda x:x.isdigit(),list("sdfa45ads46723")))

7

>>> reduce(lambda x,y:x+y,map(lambda x:len(x),filter(lambda x:x.isdigit(),[i for i in s][::-1])))

7

原文地址:https://www.cnblogs.com/xiaxiaoxu/p/9740086.html

时间: 2024-10-29 00:07:10

python六剑客:map()、lambda()、filter()、reduce()、推导类表、切片的相关文章

python六剑客

python六剑客map.filter.reduce.lambda.切片.推导列表 python最有特点的一行代码,所有代码均可以借用一行代码(目标)map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回.举例说明,比如我们有一个函数f(x)=x%2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现一个最简单的例子,如基于f(x) = x²,map()作用于lis

Python的lambda, filter, reduce 和 map简介

Lambda 操作 Lambda操作——有些人喜欢,有些人讨厌,还有很多人害怕.当你看完了我们这章的介绍后,我们很自信你会喜欢上它.要不然,你可以去学习Guido van Rossums更喜欢去用的“list comprehensions”(递推式构造列表)了,因为他也不喜欢Lambda, map filter 和reduce. Lambda操作或者lambda函数是一种创建小型匿名函数的方式,即:函数都没有函数名.这些函数都是投掷(throw-away)函数,即:它们只会在我们需要的地方创建,

python Lambda, filter, reduce and map

1. lambda The lambda operator or lambda function is a way to create small anonymous functions , i.e. functions without a name. 可以方便的创造一个函数.比如 def add(x,y): return x+y 用lambda 写就是 lambda x,y:x+y 非常简洁.这条语句会返回一个函数指针,你可以他赋值,或者配合map ,reduce 等操作. 比如说想把list

lambda 匿名函数,map,filter,reduce,zip,介绍

sum_1=lambda x,y:x+yprint(sum_1(1,2)) l=[1,2,3,4]print(list(map(lambda x:x*4,l)))#map()将函数func应用于序列seq中的所有元素.# 在Python3之前,map()返回一个列表,# 列表中的每个元素都是将列表或元组"seq"中的相应元素传入函数func返回的结果#使用map就相当于使用了一个for循环def my_map(func,seq): result=[] for i in seq: res

python中的map、filter、reduce函数

三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str. 1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function, sequence[, sequence, ...]) -> list 通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个集合. function可以理解为是一个一对一或多对一函数,map的作用是以参数序列中的每一个元素调用function函数,返回包含每次fu

一句话搞定python六剑客

六剑客 一行搞定六剑客:三个函数:map filter reduce + lambda 切片 推导列表 python最有特点的一行代码,所有代码均可以借用一行代码(目标) 1.map(函数,列表或者字符串)#字符串或者列表中每个字符或每个元素都带入函数运算 1.map函数: 输出结果为列表 1)列表元素的map运算, >>> map(s,[1,2,3]) [2, 3, 4] 2)字符串元素的map运算,函数用lambda实现 >>> map(lambda x:x.upp

python 六剑客(匿名函数和内建函数)

一. 匿名函数lambda 1.lambda只是一个表达式,函数体比def简单很多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去 >>> def add(a,b):...     return a+b...>>> add(1,4)5>>>>>> lambda x:x+2<function <lambda> at 0x00000273C937B8C8> 

python中的map,filter,zip函数

map() Return an iterator that applies function to every item of iterable, yielding the results 例如: a = map(lambda x:x**2 ,[1,2,3]) print([b for b in a]) 结果: [1, 4, 9] 或者: a = map(lambda x,y:x+y ,[1,2,3],[1,2]) print([b for b in a]) 结果: [2, 4] filter(

闭包 -&gt; map / floatMap / filter / reduce 浅析

原创: 转载请注明出处 闭包是自包含的函数代码块,可以在代码中被传递和使用 闭包可以捕获和存储其所在上下文中任意常量和变量的引用.这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift 会为您管理在捕获过程中涉及到的所有内存操作. 闭包表达式是一种利用简洁语法构建内联闭包的方式 sort 方法(The Sort Method) Swift 标准库提供了名为sort的方法,会根据您提供的用于排序的闭包函数将已知类型数组中的值进行排序.一旦排序完成,sort(_:)方法会返回一个与原数组大小相