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. mysql百分比显示

    select doll_name, type, value concat( left(get /(get+ fall)*100, 5), '%') as 抓取概率 from doll_conf

  2. sort is deprecated, use sort_values(inplace=True) for INPLACE sorting

    排序是过时的,用sort_values(到位=真)为就地排序

  3. (原)ubuntu上编译PANet/Detectron.pytorch时-std=c99的错误

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10494787.html 在ubuntu上编译PANet/Detectron.pytorch时,总提示 ...

  4. MySQL技术内幕读书笔记(六)——索引与算法之全文索引

    全文索引 概述 ​ 通过索引字段的前缀进行查找,B+树索引是支持的,利用B+树索引就可以进行快速查询. SELECT * FROM blog WHERE content like 'xxx%'; ​ ...

  5. IPv6地址分类及表示方法

    对于IPv4地址,我们知道分为A类.B类.C类.组播地址和留用地址,几大类,ABC类地址中还会有不同功能的如广播地址.私有地址等类型.那么IPv6的地址是怎么分类的呢?本文就带大家初步了解一下. 先说 ...

  6. ld: library not found for -lstdc++.6

    ld: library not found for -lstdc++.6 Xcode10 删除 libstdc++.6.tbd libstdc++.6.0.9.tbd 用 libc++.tbd lib ...

  7. Kafka 生产者和消费者入门代码基础

    这篇博文讲解Kafka 的生产者和消费者实例. 基础版本一 生产者 ProducerFastStart.java package com.xingyun.tutorial_1; import org. ...

  8. 如何将自己写的verilog模块封装成IP核

    如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...

  9. 数字签名与HTTPS详解

    因为HTTP协议本身存在着明文传输.不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点,所以才有了HTTPS的缺陷.HTTPS确切的的说不是一种协议,而是HTTP + SSL (TS ...

  10. vue中如何动态的绑定图片,vue中通过data返回图片路径

    在项目中遇到需要动态的改变图片路径,图片路径并非是从后台获取过来的数据. 因此在data中必须用require加载,否则会当成字符串来处理. 效果: