python map lambda 分割字符串_python六剑客:map()、lambda()、filter()、reduce()、推导类表、切片...

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebDAV方式访问Exchange 2003收件箱程序

publicDataTable GetUnReadMail() { stringurl "http://ip/exchange/"; //指定Exchange服务器地址 System.Net.HttpWebRequest Request; System.Net.WebResponse Response; System.Net.CredentialCache MyCredentialCache; stringstrUserName "admi…

Js操作cookie

为什么80%的码农都做不了架构师&#xff1f;>>> 贴上一段js操作cookie的方法&#xff1a; //setCookie function setCookie(cname, cvalue, exdays) { var d new Date(); d.setTime(d.getTime() (exdays*24*60*60*1000)); //day var expires "expires…

网站主机和服务器选哪个,虚拟主机和服务器 你的网站该选择哪一个?

原标题&#xff1a;虚拟主机和服务器 你的网站该选择哪一个&#xff1f;大家在平时使用虚拟主机的时候可能并不了解他的原理&#xff0c;更是分不清楚虚拟主机和服务器之间的区别&#xff0c;不知道自己的网站该如何选择。虚拟主机是通过软件技术将一台服务器分成多个独立WEB发…

Eclipse3.6.2 64位启动报“Failed to load the JNI shared library”错的解决方法

Eclipse3.6.2 64位解压后双击运行eclipse&#xff0c;报“Failed to load the JNI shared library”错误。 如下图所示&#xff1a; 原来我的jdk是以前旧32位系统安装jdk后&#xff0c;不支持Eclipse3.6.2 64位导致报错&#xff0c;无法正常运行。从官网上&#xff1a; http://…

一个长方体玻璃容器从里面量长宽_泰来包装分享:如何设计钢边箱里面中型木包装箱...

钢边箱里面的中型木包装箱是以木质材料为主制成的有一定刚性的包装容器&#xff0c;是产品运输包装的主要容器之一&#xff0c;也是我国出口商品使用非常广泛的一种包装&#xff0c;在轻工&#xff0c;机械&#xff0c;半导体等包装领域起着不可替代的重要作用。关于钢边箱里面…

uml 中的小人

平常画uml的时候&#xff0c;经常会用到Actor, 也没仔细思考过Actor的深刻内涵今天看了程序员11月的杂志&#xff0c;里面有篇文章叫<这个小人不简单>&#xff0c;文章中强调用例技术的不同之处在于发现了"卖"-需求是研究软件怎么好卖的技能。现在对uml有了更深…

快速上手Ubuntu搭建Python编程环境

#Ubuntu 14.04 LTS已经预装Python2/3&#xff0c;可以满足基本的编程需求。#让系统支持aptitude命令sudo apt-get install aptitude -y#将系统升级到最新。sudo aptitude -y upgrade#若需导入turtle来完成一些程序&#xff0c;则需要补充安装python-tk库&#xff1a;#为Python3…

SQL SERVER 事务处理

<1>.事务的概念 事务是一个不可分割的工作逻辑单元。<2>.为什么使用事物 可以防止错误的发生。<3>.事物的作用 要么所有的操作全部完成&#xff0c;要么所有操作都不执行。<4>.什么是事物 事务是单个的工作单元 …

net start zabbix agent 服务没有相应控制功能_一步到位,服务器监控就是这么简单...

对于运维的日常工作来说&#xff0c;服务器监控是必须且最基础的一项内容。在企业基础设施运维过程中&#xff0c;管理员必须能够掌握所有服务器的运行状况&#xff0c;以便及时发现问题&#xff0c;尽可能减少故障的发生。通常我们会借助一些监控的软件来获取每个服务器的基础…

【原题】【noip 2003 T2】【动态规划】加分二叉树

问题 描述 Description 设一个n个节点的二叉树tree的中序遍历为&#xff08;l,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整数&#xff09;&#xff0c;记第i个节点的分数为di&#xff0c;tree及它的每个子树都有…

HRegionServer上工作组件汇总

HRegionServer上工作组件汇总&#xff0c;近期推出&#xff01;

发现在创建云服务器ecs实例的磁盘快照时_玩转ECS第7讲|ECS数据保护-数据备份新特性与最佳实践...

简介&#xff1a; 本文中&#xff0c;阿里云智能弹性计算专家余初武(悟元)将结合阿里云近期推出的数据备份新特性(快照极速备份、一致性快照组)来介绍云上环境如何做数据备份的最佳实践&#xff1b;适合需要构建云上架构的工程师&#xff0c;架构师和云上实施从业人员收看。关键…

用Ant编译Flex项目的几点注意事项

1. 往mxmlc中用define添加编译参数的时候特别要注意一点&#xff0c;字符串一定要包含在单引号中。 下面的写法是无法通过的&#xff1a; <mxmlc ...><define name"NS::NAME" value"Flex in air"/> </mxmlc>下面的写法才是正确的&#x…

链表打印从尾到头打印链表

在本文中,我们主要介绍链表打印的内容,自我感觉有个不错的建议和大家分享下 每日一道理 生命不是一篇"文摘"&#xff0c;不接受平淡&#xff0c;只收藏精彩。她是一个完整的过程&#xff0c;是一个"连载"&#xff0c;无论成功还是失败&#xff0c;她都不会…

1、EJB基本概念及运行环境

1、EJB是什么&#xff1f; EJB是一个用于分布式业务应用的标准服务端组件模型。采用EJB构架编写的应用是可伸缩的、事务性的、多用户安全的。采用EJB编写的应用可以部署在任何支持EJB规范的服务器平台上&#xff0c;例如&#xff1a;jboss、weblogic。 2、EJB是用来干什么的&am…

二分法求方程的根_快速求解方程的根——二分法与牛顿迭代法

今天是周四高等数学专题的第7篇文章。之前的文章和大家聊了许多数学上的理论&#xff0c;今天和大家聊点有用的东西。我们都知道&#xff0c;工业上的很多问题经过抽象和建模之后&#xff0c;本质还是数学问题。而说到数学问题就离不开方程&#xff0c;在数学上我们可以用各种推…

关于android开发环境的创建

最近想暑假找个实习单位&#xff0c;想想java android方面的应该比c、C要好点&#xff0c;然后就想重操旧业学习android 大三的时候我学过一个学期的android知识。当时创建开发环境我很快就弄好了&#xff0c;但是环境创建险些让我崩溃。 环境搭建包括四步&#xff1a; 1、JDK安…

getchar()和EOF总结

大师级经典的著作&#xff0c;要字斟句酌的去读&#xff0c;去理解。以前在看K&R的The C Programming Language(SecondEdition) 第1.5节的字符输入/输出&#xff0c;被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚getchar()的工作原理和EOF的用法。因此,感觉很有必…

Android多种View动画:EasyAndroidAnimations

&#xfeff;&#xfeff;Android多种View动画&#xff1a;EasyAndroidAnimations EasyAndroidAnimations是Android的一个动画库&#xff0c;使用起来简单方便&#xff0c;EasyAndroidAnimations将一个Android View以各种形式的动画动起来。 其中如图&#xff1a; EasyAndroidA…

python中configparser详解_Python中的ConfigParser模块使用详解

1.基本的读取配置文件-read(filename) 直接读取ini文件内容-sections() 得到所有的section&#xff0c;并以列表的形式返回-options(section) 得到该section的所有option-items(section) 得到该section的所有键值对-get(section,option) 得到section中option的值&#xff0c;返…