一:map():映射

map()函数在python2和python3中是区别的

python2中的定义:映射后,返回一个列表

>>> help(map)

Help on built-in function map in module __builtin__:

map(...)

map(function, sequence[, sequence, ...]) -> list

Return a list of the results of applying the function to the items of

the argument sequence(s). If more than one sequence is given, the

function is called with an argument list consisting of the corresponding

item of each sequence, substituting None for missing values when not all

sequences have the same length. If the function is None, return a list of

the items of the sequence (or a list of tuples if more than one sequence)

python3中的定义:映射后,返回一个迭代器,

>>> help(map)

Help on class map in module builtins:

class map(object)

| map(func, *iterables) --> map object

|

| Make an iterator that computes the function using arguments from

| each of the iterables. Stops when the shortest iterable is exhausted.

map()有两个参数,一个函数,一个序列,序列中每一个元素都会做为参数传给前边的函数,然后生成新的对象(python2中是list,python3中是iterator),第二个参数必须用一个序列:元祖,列表,字符串

python2中的map():

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

['1', '2', '3', '4']

python3中的map():

搭配lambda函数

>>> map(lambda x:x.upper(),"abc")

['A', 'B', 'C']

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

python2:

例子: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)]

python3:

>>> map(lambda x,y:(x,y),a,b)

>>> type(map(lambda x,y:(x,y),a,b))

>>> list(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()函数在python2和python3中也是有区别的

python2中的zip():>>> zip(a,b)[(1, 4), (2, 5), (3, 6)]

python3中的zip():

>>> a = [1,2,3]

>>> b = [4,5,6]

>>> zip(a,b)

>>> type(zip(a,b))

>>> list(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')

python3:

>>> filter(lambda x:int(x)>5, "12346789")

>>> list(filter(lambda x:int(x)>5, "12346789"))

['6', '7', '8', '9']

>>> 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")

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 分割字符串_python六剑客:map()、lambda()、filter()、reduce()、推导类表、切片...相关推荐

  1. python map lambda 分割字符串_Python特殊语法:filter、map、reduce、lambda [转]

    Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(ite ...

  2. python map lambda 分割字符串_python之lambda、filter、map、reduce的用法说明(基于python2)...

    python中有一些非常有趣的函数,面试的时候可能会遇到.今天也来总结一下,不过该类的网上资料也相当多,也没多少干货,只是习惯性将一些容易遗忘的功能进行整理. lambda 为关键字.filter,m ...

  3. python map lambda 分割字符串_[转] Python特殊语法:filter、map、reduce、lambda

    Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(ite ...

  4. Python使用正则表达式分割字符串

    re.split(pattern, string, [maxsplit], [flags]) pattern:表示模式字符串,由要匹配的正则表达式转换而来. string:表示要匹配的字符串. max ...

  5. python读取路径中字符串_python实现提取str字符串/json中多级目录下的某个值

    字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式), ...

  6. python用户输入一行字符串_python字符串练习

    1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7-位上的字符) 例如: 输入'abcd1234 ' ** 输出'bd24'** str1 = input('请输入:') for it ...

  7. python 只取年月日 字符串_Python基础:数据类型和变量amp;字符串和编码

    Python基础:1.数据类型和变量 数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网 ...

  8. python按年月日输出字符串_python日期时间转为字符串或者格式化输出的实例

    python日期时间转为字符串或者格式化输出的实例 如下所示: 年月日时分秒 >>> print datetime.datetime.now().strftime("%Y- ...

  9. python处理多行字符串_python多行字符串

    Python中如何处理长代码格式化问题,如何提高格式化输出的长字符串的可读性? 当我们需要格式化输出一个很长的字符串的时候,都写在一行显得很难看,而且可读性也很差:当我们使用链式的语法写代码的时候常常 ...

最新文章

  1. RDS读写分离,海量数据一键搞定
  2. Spring Autowired 注入失败总是Null
  3. Google电子地图基础及应用
  4. 全国计算机等级考试题库二级C操作题100套(第23套)
  5. 小米12 Ultra相机参数曝光:1.92亿像素主摄+1英寸超大底
  6. SAP License:SAP顾问是如何炼成的——我所理解的SAP顾问
  7. 某公司ASP.NET应聘上机试题
  8. Cocos2d-x 着色器
  9. 小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写并输出互换后的结果
  10. 职称计算机word中文字处理,计算机职称考试Word 2007中文字处理考试大纲
  11. 【hibernate进阶】hibernate基本映射
  12. 阿里新推出“阿里云网盘”App,有机会干掉“百度网盘”吗?
  13. Freertos中空闲任务的重要性
  14. android 删除一个工程,Android Studio该怎样删除项目?
  15. house of apple2(改进)
  16. SpringBoot整合Logback日志框架+Slf4j注解使用
  17. 计算机操作处于挂起状态,计算机重新启动操作可能处于挂起状态怎么办?
  18. 三菱fx3u型PLC和昆仑通泰MCGS触摸屏控制松下伺服电机控制程序
  19. 16-命令模式Quarkus实现
  20. 智慧电力:变电站人员定位系统改变传统监管模式

热门文章

  1. Win10还原被Windows Defender隔离的文件
  2. C# Socket网络编程精华篇
  3. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理
  4. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
  5. java-servlet
  6. Androd安全——反编译技术完全解析
  7. 两个Python web框架:Django Tornado比较
  8. Model、ModelMap和ModelAndView的使用详解
  9. 初谈逻辑读、物理读、预读
  10. Jenkins持续集成 之 Jenkins安装