Python基础知识(12):函数(Ⅲ)

高阶函数

1、map

map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

def test(x):
return x+2
n=map(test,[1,2,3,4,5])
list(n)

结果:

[3, 4, 5, 6, 7]

把列表中的数字转换成字符串

list(map(str,[1,2,3,4,5]))

结果:

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

2、reduce

接收两个参数,一个函数,一个序列,reduce会把结果继续和序列的下一个元素做累积计算

如对序列[1,2,3,4,5]求和

def add(x,y):
return x+y reduce(add,[1,2,3,4,5])

结果:15

把序列[1,2,3]转换成整数15

def test(x,y):
return x*10+y reduce(test,[1,2,3])

结果:123

与map函数配合使用,把str转换成int

from functools import reduce

digits = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}

def strint(s):
def fn(x,y):
return x*10+y
def charnum(s):
return digits[s]
return reduce(fn,map(charnum,s)) strint("")

结果:123

可以用lambda匿名函数进一步简化

from functools import reduce

digits = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
def charnum(s):
return digits[s] def strint(s):
return reduce(lambda x,y:x*10+y,map(charnum,s)) strint("")

结果:123

3、filter

filter函数用于过滤序列,它接收两个参数,一个函数一个序列

filter函数会根据函数内的条件遍历序列,判断每个元素的布尔值,如果为True则保留

filter()函数返回的是一个Iterator,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list

def test(x):
return x%2==0 list(filter(test,[1,3,6,8,10,17]))

结果:

[6, 8, 10]

删除序列中的空字符

def not_empty(n):
return n and n.strip() list(filter(not_empty, ['Alice', '', 'Bob', None, 'May', ' ']))

结果:

['Alice', 'Bob', 'May']

4、sorted

可以对字符串和列表中的元素进行排序

sorted([84,24,1,136,21])

sorted(["Bob","abc","May","Alice"])

结果:

[1, 21, 24, 84, 136]

['Alice', 'Bob', 'May', 'abc']

注:字母进行排序时,大写字母排在小写字母前面

接收一个key函数实现自定义,如按绝对值大小排序

sorted([-32,6,10,-1,0],key=abs)

结果:

[0, -1, 6, 10, -32]

对字母进行排序时忽略大小写,即先将字母转换成大写(或小写),然后再进行排序

sorted(["Bob","abc","May","Alice"],key=str.upper)
sorted(["Bob","abc","May","Alice"],key=str.lower)

结果:

['abc', 'Alice', 'Bob', 'May']

如果要进行反向排序,可以使用参数reverse=True

sorted(["Bob","abc","May","Alice"],key=str.lower,reverse=True)

结果:

['May', 'Bob', 'Alice', 'abc']

Python学习之旅(十三)的更多相关文章

  1. 180分钟的python学习之旅

    最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...

  2. Python学习笔记(十三)

    Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...

  3. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  4. Python学习之旅(三十三)

    Python基础知识(32):网络编程(Ⅰ) 网络通信是两台计算机上的两个进程之间的通信,而网络编程就是如何在程序中实现两台计算机的通信 P协议负责把数据从一台计算机通过网络发送到另一台计算机 TCP ...

  5. Python学习之旅(二十三)

    Python基础知识(22):进程和线程(Ⅰ) 1.多进程 (1)fork Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程 fork可以在Mac ...

  6. python学习笔记-(十三)堡垒机

    1.课前准备: 本次学习堡垒机相关知识:之前,需要安装Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作. 前提: python3.5程序安装到默认路径下并已添加pa ...

  7. python学习之旅:array 转 list

    最近学习python,记录学习的点滴. >>> import numpy as np >>> a = np.array([[1,2],[3,4]]) >> ...

  8. Python学习之旅(三十八)

    Python基础知识(37):访问数据库(Ⅱ) 二.MySQL MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MyS ...

  9. Python学习之旅(三十六)

    Python基础知识(35):电子邮件(Ⅱ) 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上 收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3 Pytho ...

随机推荐

  1. .NET/C# 资源

     .NET/C#  开源资源收集 Roslyn ---C# 开源编译器 iSpy免费的开源视频监控平台   https://github.com/ispysoftware/iSpy .NET Fram ...

  2. C# 程序打包成安装项目

    Xaml设置图标https://blog.csdn.net/u014234260/article/details/73648649 winform程序控制面板中卸载显示图标https://blog.c ...

  3. SpringBoot2.0+Shiro+JWT 整合

    SpringBoot2.0+Shiro+JWT 整合 JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息. 我们利用一定的编 ...

  4. 【C语言天天练(三)】typedef具体解释

    引言: typedef能够看作type define的缩写,顾名思义就是类型定义,也就是说它仅仅是给已有的类型又一次定义了一个方便使用的别名.并没有产生新的数据类型. typedef与define的不 ...

  5. Deep Dive into Spark SQL’s Catalyst Optimizer(中英双语)

    文章标题 Deep Dive into Spark SQL’s Catalyst Optimizer 作者介绍 Michael Armbrust, Yin Huai, Cheng Liang, Rey ...

  6. jinfo

    jinfo是jdk自带的命令,用来查看.修改jvm的配置参数. [weblogic@host bin]$ jinfo-bash: jinfo: command not found[weblogic@h ...

  7. Python threading 多参数传递方法

    今天开启线程传递参数的时候,出现了一个小问题,一直不能传递多个参数,如下 import threading thread1 = threading.Thread(target=fun, args=[1 ...

  8. Spark RDD、DataFrame原理及操作详解

    RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...

  9. HIVE metastore Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)

    HDP 版本:2.4.0.0-169. 解决:将hive 所在 节点上的/usr/hdp/2.4.0.0-169/hive/script/metastore/upgrade/msql/hive-sch ...

  10. Tensorflow 与Caffe(转)

    TensorFlow TensorFlow 是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写 C++或 CUDA 代码.它和 Theano 一样都支持自动求 ...