一:map():映射

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

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

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

也可以自己定义函数

搭配lambda函数

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

map()函数搭配lambda传多个参数

 例子:2个list,[1,2,3][4,5,6],合并为[(1, 4), (2, 5), (3, 6)]

>>> a=[1,2,3]
>>> b=[4,5,6]

>>> map(lambda x,y:(x,y),a,b)
[(1, 4), (2, 5), (3, 6)]

map()传多个参数(序列)时,每次取元素进行map时,是在每个序列的相同位置取值,

然后作为一个元祖传给参数前边的函数的,所以用这个原理,把函数设置None,也可以生成题中的结果,由此也能看到map函数在取值时的逻辑

>>> map(None,list1,list2)

[(1, 4), (2, 5), (3, 6)]

或者用zip()函数也可以
>>> zip(a,b)
[(1, 4), (2, 5), (3, 6)]

二: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]

相当于把for循环中每次循环得到的数作为一个列表的一个元素,知道所有循环执行结束

各个元素生成的过程相当于以下两句得到的:

for i in range(10):

print i

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

练习:a=[[1,2,3],[4,5,6]]用推导列表生成[[1, 4], [2, 5], [3, 6]]

[[j[i] for j in a] for i in range(3)]

结果:

[[1, 4], [2, 5], [3, 6]]

以上推导列表过程转换成for循环:最外层的for也对应转换成for循环的最外层

>>> for i in range(3):
...     print "\n**************"
...     for j in a:
...         print j[i],
...

结果中有三个元素,每个元素又是包含2个元素的列表,这个元素是执行一次for循环得到的值

拆解过程:

每执行一次完整的循环,生成两个数,这个两个数会以列表的形式作为最后结果列表的一个元素,

也就是说,推导列表的每一步生成的结果会以列表的形式存在,包括最终的结果

>>> for i in range(3):
...     print "\n**************"
...     for j in a:
...         print j[i],
...

**************
1 4
**************
2 5
**************
3 6

五: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

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

  1. python一些内建函数(map,zip,filter,reduce,yield等)

    python一些内建函数(map,zip,filter,reduce,yield等) map函数 Python实际上提供了一个内置的工具,map函数.这个函数的主要功能是对一个序列对象中的每一个元素应 ...

  2. Python中Lambda, filter, reduce and map 的区别

    Lambda, filter, reduce and map Lambda Operator Some like it, others hate it and many are afraid of t ...

  3. Python中的map()函数和reduce()函数的用法

    Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下   Py ...

  4. python 练习用python六剑客实现一个统计数字的个数,六剑客:(map、lambda、reduce、filter、切片、推到列表)

    统计一共有几个数字 s="sdfa45ads46723" #lambda >>> filter(lambda x:x.isdigit(),list(s)) ['4 ...

  5. Python高级特性: 函数编程 lambda, filter,map,reduce

    一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...

  6. Python -- map, Lambda, filter and reduce

    map(func, seq)对seq中的每一个元素,调用func并返回结果.典型的应用是使用lambda函数. >>> def square(x): return x**2 > ...

  7. python Lambda, filter, reduce and map

    1. lambda The lambda operator or lambda function is a way to create small anonymous functions , i.e. ...

  8. python中的map、filter、reduce函数

    三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str.   1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function ...

  9. 简单易懂之python 中的map,filter,reduce用法

    map(function,sequence) 把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list. 重点是结果返回一个列表,这样对返回的列表就可以干很多的活了. ...

随机推荐

  1. python selenium操作表格式元素实例

    很多时候,网页上的布局都是表格形式的,如出下面这样的 这种网页类型在自动化中比较头痛,需要很多判断,下面就举个例子,这里以深圳出入境网页为例,http://yysl.sz3e.com/wsyysq/s ...

  2. Thinkphp框架下PHPExcel实现Excel数据的批量化导入导出

    第一步:下载官方的PHPExcel文件,下载地址https://github.com/PHPOffice/PHPExcel 第二步:解压打开,将PHPExcel\Classes\全部文件拷贝到thin ...

  3. java.sql.SQLException:The Network Adapter could not establish the connection

    数据库连不上了,可能数据断了或者修改IP了

  4. Docker 学习应用篇三:使用docker搭建的环境,安装thinksns

    Thinksns 是一个开源的社交网站,因为目前的项目需要用到这个,所以就下载一个安装试试看. 之前在windows上用了wamp,安装的很顺利.但是项目是要部署到linux上的.于是我便用了Dock ...

  5. 2.4scope

    name_scope variable_scope scope (name_scope/variable_scope) from __future__ import print_function im ...

  6. 【转】C#线程篇

    C# 温故而知新: 线程篇(一) C# 温故而知新: 线程篇(二) C# 温故而知新:线程篇(三) C# 温故而知新: 线程篇(四)

  7. 设计模式之——flyweight模式

    flyweight模式,又叫做享元模式. 顾名思义,享元模式就是共享一个元素. 百度百科 解释为: 享元模式(英语:Flyweight Pattern)是一种软件设计模式.它使用共享物件,用来尽可能减 ...

  8. php Only variables can be passed by reference

    最近做项目,发现了一个报错  Only variables can be passed by reference,  意思是"只有变量能通过'引用'" 就是在代码中 使用了一个方法 ...

  9. flask 小知识总结 2018.12.18

    Visual Studio Code 1.自定义python组建,方便某功能和代码的便捷操作 文件--首选项--用户代码片段--python.json--自定义需要的代码和功能 2.自定义快捷键方法 ...

  10. 代码实现SQL SERVER TCP/IP协议配置

    代码实现SQL SERVER TCP/IP协议配置 SET NOCOUNT ON ) ,) ,) SET @Root = 'HKEY_LOCAL_MACHINE' SET @Path = 'Softw ...