Python 常用内置函数与匿名函数的应用

news2024/12/24 3:35:42

mypython-1


目录

    • 一、前言
    • 二、常用内置函数
      • 2.1 max()
      • 2.2 enumerate()
      • 2.3 map()
      • 3.4 reduce()
      • 2.5 filter()
      • 2.6 sorted()


一、前言

我们知道,Python 函数总体可分为两类,一类是标准函数,一类是匿名函数。其中标准函数中又可细分为内置标准函数、自定义标准函数。接下来列举一些常用的内置函数与匿名函数的实际应用。

二、常用内置函数

2.1 max()

1、常规用法

max() 函数的比较方法是遍历可迭代数据类型进行 > 比较,获取可迭代数据类型的最大值。

list1 = [1, 2, 3, 9, 6, 5]
m = max(list1)

print('列表的最大值为:', m)

image-20230221112457418

2、结合 key 使用

如果我的列表里面嵌套字典,又如何比较呢?答案:max() 函数设置 key,具体如下。

两个数字可以直接比较大小,而两个字典是无法直接比较大小的,这个时候就可以结合匿名函数来获取返回值来进行比较。

list2 = [{'a' : 10, 'b' : 20}, {'a' : 13, 'b' : 20}, {'a' : 9, 'b':20}, {'a' : 29, 'b' : 20}]
m = max(list2, key = lambda x : x['a'])

print('列表的最大值为:', m)

image-20230221112929656

在 max() 函数底层,key 默认为 None,如果要指定 key,那 key 必须是一个函数,如下图解释:

image-20230221113211123

因此,这里就凸显出匿名函数的优势了,就不需要额外定义函数了。

2.2 enumerate()

使用内置函数 enumerate() 遍历数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标(一般用在 for 循环当中):

# 语法
enumerate(sequence, [start=0])

# 注释
sequence -- 一个序列、迭代器或其他支持迭代对象。
start -- 下标起始位置的值。

# 返回值
返回 enumerate(枚举) 对象。

简单案例:

seasons = ['Spring', 'Summer', 'Fall', 'Winter']

print(enumerate(seasons))     # 可见输出是一个枚举对象
# 下标默认从0开始
print(list(enumerate(seasons)))  # 将枚举对象强转为列表对象
# 设置下标从1开始
print(list(enumerate(seasons, start=1)))   # 设置索引下标开始位置

image-20230221122015129

普通的 for 循环:

i = 0
seq = ['one', 'two', 'three']
for element in seq:
    print(i, seq[i])
    i += 1

image-20230221122159341

for 循环使用 enumerate:

seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
    print(i, element)

image-20230221122159341

2.3 map()

如使用 map() 函数对列表中元素做运算操作。

不使用 map() 函数:

list1 = [1, 3, 5, 7]

for index, i in enumerate(list1):
    list1[index] = i + 2
print(list1)

image-20230221141759047

使用 map() 函数:

# 使用map()内置函数实现列表做加法运算
list1 = [1, 3, 5, 7]

result = map(lambda x: x + 2, list1)
print(list(result))

image-20230221141759047

可见,两者的功能完全一样。

如果我只对基数+1,偶数不变,如何实现?

# 使用map()内置函数实现列表做加法运算
list1 = [1, 3, 6, 8]

result = map(lambda x: x if x % 2 == 0 else x + 1, list1)
print(list(result))

image-20230221143318606

3.4 reduce()

对序列中的元素进行加减乘除运算的函数。

# 使用map()内置函数实现列表做加法运算
from functools import reduce

tuple1 = (3, 5, 7, 8, 9, 1)

result = reduce(lambda x, y: x + y, tuple1)

print(result)

执行结果:

image-20230221144256222

内部实现原理:

image-20230221144343984

需要注意,reduce 必须且至少要传入两个参数,否则报错(因为这个函数的功能是实现两个参数依次相加),如下:

# 使用map()内置函数实现列表做加法运算
from functools import reduce

tuple1 = (3, 5, 7, 8, 9, 1)
result = reduce(lambda x, y: x + y, tuple1)
print(result)

tuple2 = (1)
result = reduce(lambda x, y: x + y, tuple2)
print(result)

image-20230221144836442

正确做法是:

# 使用map()内置函数实现列表做加法运算
from functools import reduce

tuple1 = (3, 5, 7, 8, 9, 1)
result = reduce(lambda x, y: x + y, tuple1)
print(result)

tuple2 = (1,)  # 即便你不输入任何内容,你也要把元素置为空(从内部实现原理initial就知道)
result = reduce(lambda x, y: x + y, tuple2)
print(result)

image-20230221145613502

当然,你可以指定 initial 值,当你只有一个元素的时候,你可以来进行指定。

# 使用map()内置函数实现列表做加法运算
from functools import reduce

tuple1 = (3, 5, 7, 8, 9, 1)
result = reduce(lambda x, y: x + y, tuple1)
print(result)

tuple2 = (1,)  # 即便你不输入任何内容,你也要把元素置为空(从内部实现原理initial就知道)
result = reduce(lambda x, y: x + y, tuple2, 10)
print(result)

image-20230221145732309

那这个 10 是指的 x 呢,还是 y 呢?我们做一遍减法运算就知道:

# 使用map()内置函数实现列表做加法运算
from functools import reduce

tuple1 = (3, 5, 7, 8, 9, 1)
result = reduce(lambda x, y: x + y, tuple1)
print(result)

tuple2 = (1,)  # 即便你不输入任何内容,你也要把元素置为空(从内部实现原理initial就知道)
result = reduce(lambda x, y: x - y, tuple2, 10)
print(result)

image-20230221145940527

可见 initial 初始值指的是 x(即排在第一位)。

2.5 filter()

过滤操作,比如将列表中 > 10 的数全部过滤出来。

list1 = [2, 20, 5, 9, 36]
result = filter(lambda x: x > 10, list1)

print(list(result))

image-20230221150735703

其内部相当于以下操作:

list1 = [2, 20, 5, 9, 36]
def func(list1):
    list2 = []
    for i in list1:
        if i > 10:
            list2.append(i)
    return list2

f = func(list1)
print(f)

找出所有年龄大于20岁的学生:

students = [
    {'name': 'tom', 'age': 20},
    {'name': 'jack', 'age': 19},
    {'name': 'alice', 'age': 12},
    {'name': 'lily', 'age': 21},
    {'name': 'lucy', 'age': 18},
    {'name': 'steven', 'age': 27}
]

# 找出所有年龄大于20岁的学生
result = filter(lambda x: x['age'] > 20, students)
print(list(result))

image-20230221152546266

2.6 sorted()

用于排序(从小到大/从大到小)。

students = [
    {'name': 'tom', 'age': 20},
    {'name': 'jack', 'age': 19},
    {'name': 'alice', 'age': 12},
    {'name': 'lily', 'age': 21},
    {'name': 'lucy', 'age': 18},
    {'name': 'steven', 'age': 27}
]

# 按年龄从小到大排序(升序)
result = sorted(students, key=lambda x: x['age'])
print(result)

# 按年龄从大到小排序(倒序)
result = sorted(students, key=lambda x: x['age'], reverse=True)
print(result)

image-20230221154446482

以上的这些常用内置函数都用到了匿名函数,可见匿名函数的重要性与实用性。

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

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

相关文章

支付宝一面:如何基于Redis实现分布式锁?

复习八股文的时候,分布式锁大家应该不陌生,像很多阿里、美团的面试官就很喜欢问这个问题。 前几天一位读者面试阿里的时候,就被问到了这个问题。当时,面试官追问的比较深,一些细节他回答的不是很好。不过,…

遭遇疑似网络攻击时服务器异常情况排查方法

一、适用场景 该方法主要用于发生网信安全异常情况时的异常设备信息提取和登机排查指导,主要包括主机类设备,linux和windows操作系统为主。 二、处理原则 网络安全应急工作坚持统一指挥、分工负责、及时预警、分级响应、密切协同、快速处置、确保恢复、…

Android Studio设置不自动运行到run标签

点击run成功后会自动切换到run标签,很烦人 设置: Edit Configuration app下的Miscellaneous 下,取消勾选 Activate tool window

提升项目经理能力,有什么方法?

一,项目管理是职场的基础能力 他思考了一会,和我说:项目经理这个职业,同事专业性强,薪酬稳定,福利优越。只要有几年的项目管理经验,也能生存无忧。 但是,如果你不满足于只做一个普…

计网笔记--数据链路层

1--数据链路层三个问题 ① 封装成帧 ② 差错控制 差错检测:奇偶校验和循环冗余校验 ③ 可靠传输 2--三种可靠传输协议 ① 停止-等待协议(SW) 接收成功,发送ACK确认信号,接收失败,发送NAK否认信号&#xf…

Elasticsearch:ignore_malformed,映射异常的解药

我们知道在文档摄入到 Elasticsearch 时,如果文档的字段在 mapping 中已经有定义,而当前的文档的字段的类型和之前的类型是不一样的情况下,那么我们该如何处理呢?通常由如下的几种方法: 使用 coerce 属性。在这种情况…

python微信公众号推送消息

目录 准备数据 接口 代码 微信公众号开发文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html 准备数据 1、微信公众号注册:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 2、注册成功后可生…

基于TCP/UDP的Socket编程

---- socket概述: socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。 socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写…

springboot启动流程 (3) 自动装配

在SpringBoot中,EnableAutoConfiguration注解用于开启自动装配功能。 本文将详细分析该注解的工作流程。 EnableAutoConfiguration注解 启用SpringBoot自动装配功能,尝试猜测和配置可能需要的组件Bean。 自动装配类通常是根据类路径和定义的Bean来应…

005 Settings可以直接通过AndroidStudio安装并调试(二)——Settings 打release包遇到的问题

一.背景 Settings迁移到AndroidStudio中直接打release包是有各种问题的,打不出来包,这里我们详细来描述下Settings打包出现的问题及解决方案。 二.Type com.android.settingslib.widget.BuildConfig is defined multiple times 首先遇到的拦路虎,也是最繁琐的包名冲突,之…

为什么配电室总出故障?这一点你做对了吗

配电室是供电系统中非常关键的组成部分,负责对电能进行分配和控制。然而,传统的配电室监控方式存在一些局限性,如人工巡检的局限性、监测数据获取困难、安全隐患无法及时发现等。 因此,为了提高配电室的管理水平、确保供电系统的安…

剑指offer03.数组中重复的数字

看到这道题的第一眼想到的是先给它排序,然后双指针从左往右遍历,写了一个冒泡排序,但是我想到了应该会超时,因为冒泡时间复杂度是n的平方,输入大小时10000,肯定会超时,然后右又看了一下题目看到…

SpringCloud Alibaba入门之用户子模块开发

在上一章的基础上进行子模块的开发SpringCloud Alibaba入门之创建多模块工程_qinxun2008081的博客-CSDN博客 一、引入SpringBoot 我们在父项目统一管理引入的jar包的版本。我们采用父项目中以depencyMangement方式引入spring-boot,子项目依赖parent父配置即可。 &…

YGG 公会发展计划(GAP)第三季总结

2023年5月6日,Yield Guild Games(YGG)结束了其代币分配系统——公会发展计划(GAP)的第三季,向社区成员提供了更多奖励,以表彰他们对公会和参与游戏的宝贵贡献。 第三季对 GAP 进行了一些升级&am…

uniapp和springboot微信小程序开发实战:前端架构之微信小程序开发表单提交功能

文章目录 前言前端代码后端代码controller层service层总结前言 基本上很多项目都有类似于意见反馈、留言等形式的表单提交功能,今天给大家介绍的是使用uniapp和vue组件实现的表单提交功能。其效果如下: 前端代码 <template><view class="body"><…

Jmeter接口测试-MD5加密-请求验签

目录 前言&#xff1a; 第一部分&#xff1a;先准备好Jmeter 第二部分&#xff1a;编写MD5加密-请求验签的脚本 第三部分&#xff1a;执行脚本 前言&#xff1a; JMeter是一款常用的接口测试工具&#xff0c;对于需要进行加密验证的接口&#xff0c;我们可以使用MD5加密算…

HOOPS Exchange SDK 2023 Crack

领先的 CAD 导入和导出库 使用 HOOPS Exchange SDK 将 30 多种 CAD 文件格式导入您的应用程序以进行 CAD 数据转换&#xff0c;通过单个 API 对 2D 和 3D CAD 文件格式&#xff08;包括 CATIA、SOLIDWORKS、 Inventor、Revit™™、Creo、NX™、Solid Edge 等&#xff09;提供快…

Nvidia官方解码性能

NVIDIA VIDEO CODEC SDK | NVIDIA Developer 1080P解码性能&#xff1a; 720P解码性能&#xff1a; 详细的参见官方的链接地址&#xff0c;对于GPU的解码fps能力&#xff0c;可以作为评估参照&#xff01;

【服务器远程工具】一款好用的xshell

这里写目录标题 背景Tabby简介安装使用SSHSFTPPowerShellGit 设置外观颜色快捷键窗口 插件支持总结 背景 作为一名后端开发&#xff0c;我们经常需要和Linux系统打交道&#xff0c;免不了要使用Xshell这类终端工具来进行远程管理。今天给大家推荐一款更炫酷的终端工具Tabby&…

C++核心编程——详解函数模板

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.模板的基础知识①为什么有模板&#xff1f;②初识模板 二.函数模板①函数模板的定义②函数模板的使用③函数模板实例化1️⃣隐式实例化2️⃣显…