三种常用的内置函数--必须牢记

news/2024/7/5 3:46:28/文章来源:https://www.cnblogs.com/kkbest/p/18275614

有三种常用的内置函数,特别牛逼!!!
下面逐个介绍,看仔细了。

1、map()**
用途:处理一个可迭代对象,如列表、元组和字符串。以列表为例,处理的是里面的元素,返回的也是一个同等长度的列表。
老规矩,举例说明。
比如:对于列表[1,2,3,4,5],怎样变成[2,3,4,5,6]

(1) 常规做法
num_l = [1,2,3,4,5]
def test(array):
li = []
for i in array:
i += 1
li.append(i)
return li

print(test(num_l))
输出结果:[2, 3, 4, 5, 6]

(2)优化做法
上面这个方法显然是在函数体中把逻辑写死了,如果需要不断的变换,则每次都要去改这个主函数体,显然不好。来吧,优化一下。
num_l = [1,2,3,4,5]
def num_add(x):
return x + 1

def test(func,array):
li = []
for i in array:
li.append(func(i))
return li

print(test(num_add,num_l))
输出结果:[2, 3, 4, 5, 6]

(3)最牛逼的做法
其实方法上面(2)已经优化的挺好了,但是代码显得还是很啰嗦,python的牛逼之处就在于代码非常精简,牛逼的很。来,伙计们,看看下面的骚操作。
num_l = [1,2,3,4,5]
res = list(map(lambda x:x+1,num_l))
print(res)
输出结果:[2, 3, 4, 5, 6]

2、filter()*
用途:处理可迭代对象,比如列表,元组,字符串,处理每一个元素返回bool类型,最常见的用法是用于筛选数据。
不废话了,上例子。需求:把如下列表['sb_jack','rose','sb_pig']中的sb全部删除,只留下rose

(1)常规做法
people_list = ['sb_jack','rose','sb_pig']
def test(array):
li = []
for i in array:
if not i.startswith('sb'):
li.append(i)
else:
pass
return li

res = test(people_list)
print(res)
输出结果:['rose']

(2)优化版本
people_list = ['sb_jack','rose','sb_pig']
def move_name(n):
return n.startswith('sb')

def test(func,array):
li = []
for i in array:
if not func(i):
li.append(i)
else:
pass
return li

res = test(move_name,people_list)
print(res)
输出结果:['rose']

(3)牛逼版本 --三行代码把傻逼从列表里过滤掉。
people_list = ['sb_jack','rose','sb_pig']
res = list(filter(lambda n:not n.startswith('sb'),people_list))
print(res)
输出结果:['rose']

3、reduce -- 需要先导入from functools import reduce
用途:对可迭代对象做处理,并最后得到一个结果。函数test()可以传三个参数,第一个参数是个函数,第二个参数是要计算的列表,第三个参数可传个默认值,第三个参数不传也没关系。
比如计算一个列表的元素的加和。举例:计算列表[1,2,3,9,7,5]中每个元素的加和。

(1)常规版本
l = [1,2,3,9,7,5]
def test(array):
sum = 0
for i in l:
sum += i
return sum

res = test(l)
print(res)
输出结果:27

(2)优化版本
l = [1,2,3,9,7,5]
def sum_test(x,y):
return x + y

def test(func,array):
res = array.pop(0)
for i in array:
res = func(res,i)
return res

print(test(sum_test,l))
输出结果:27

(3)牛逼版本
from functools import reduce
l = [1,2,3,9,7,5]
res = reduce(lambda x,y:x+y,l)
print(res)
输出结果:27

以上就是三种常见的内置函数,非常牛逼,可以明显精简代码。

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

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

相关文章

蓝桥杯Java组常用知识点

备战蓝桥杯学习笔记基本数据类型 int的取值范围: -2^31 ~ 2^31-1 -2147483648 ~ 2147483647(约等于10的9次方) long long的取值范围: -2^63 ~ (2^63-1) -9223372036854775808 ~ 9223372036854775807(约等于10的18次方) 输入输出 使用文件流对输入输出的重要性:https://…

Linux内存不够了?看看如何开启虚拟内存增加内存使用量

1、为什么要使用虚拟内存 当我们没有多余的钱去购买大内存的云服务器时,但是当前服务器里面的软件和程序运行的比较多导致内存不够用了。这个时候可以通过增加虚拟内存来扩大内存容量。但是在启用虚拟内存时,需要仔细考虑系统的实际需求和硬件配置,以及权衡虚拟内存的优缺点…

camunda数据库表结构详细说明

本文基于Camunda7.19.0版本,介绍Camunda开源工作流引擎的数据库架构和ER模型,Camunda7.19.0共49张表,包括了BPMN流程引擎、DMN规则引擎、CMMN引擎、历史数据、用户身份等方面的表结构定义,以及表与表之间的关联关系。本文基于Camunda7.19.0版本,介绍Camunda开源工作流引擎…

camunda多租户技术架构介绍和测试验证

多租户考虑的是单个 Camunda 安装应该为多个租户提供服务的情况。对于每个租户,应做出一定的隔离保证。例如,一个租户的流程实例不应干扰另一租户的流程实例。 多租户可以通过两种不同的方式实现。一种方法是每个租户使用一个流程引擎。另一种方法是仅使用一个流程引擎并将数…

IEEE 8802-3 以太网标准解读

PHY: CarrierSense 载波侦听 ReceveDataValid 接受数据有效 CollisionDetect 碰撞检测 Transmitting 传输中 TransmitBit 传输比特 SFD 10101011 开始 ReceiveBit 接受比特 Wait 等待1、MA_DATA.request 定义了MAC客户端访问单独实体或者z在组地址的前提下访问多个实体 MA…

在C#中使用RabbitMQ做个简单的发送邮件小项目

在C#中使用RabbitMQ做个简单的发送邮件小项目 前言 好久没有做项目了,这次做一个发送邮件的小项目。发邮件是一个比较耗时的操作,之前在我的个人博客里面回复评论和友链申请是会通过发送邮件来通知对方的,不过当时只是简单的进行了异步操作。 那么这次来使用RabbitMQ去统一发…

【进阶篇】Java 项目中对使用递归的理解分享

笔者在最近的项目开发中,遇到了两个父子关系紧密相关的场景:评论树结构、部门树结构。具体的需求如:找出某条评论下的所有子评论id集合,找出某个部门下所有的子部门id集合。【进阶篇】Java 项目中对使用递归的理解分享 目录【进阶篇】Java 项目中对使用递归的理解分享前言一…

C#/.NET/.NET Core编程技巧练习集(学习,实践干货)

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。GitHub开源地址:https://github.com/YSGStudyHards/DotNetE…

2024年6月文章一览

2024年6月编程人总共更新了5篇文章: 1.2024年5月文章一览 2.《编译原理》阅读笔记:p18 3.《编译原理》阅读笔记:p19-p24 4.《编译原理》阅读笔记:p25-p32 5.《Programming from the Ground Up》阅读笔记:p1-p18 6月再挖一个坑,开始《Programming from the Ground Up》的学…

【论文阅读】自动驾驶光流任务 DeFlow: Decoder of Scene Flow Network in Autonomous Driving

再一次轮到讲自己的paper!耶,宣传一下自己的工作,顺便完成中文博客的解读 方便大家讨论。Title PictureReference and pictures paper: https://arxiv.org/abs/2401.16122 code: https://github.com/KTH-RPL/DeFlow b站视频: https://www.bilibili.com/video/BV1GH4y1w7LQ1.…

利用SonarCloud和Azure DevOps提升代码质量

利用SonarCloud和Azure DevOps提升代码质量 在软件开发过程中,代码质量是至关重要的。为了确保代码的清洁和安全性,我们可以使用SonarCloud——一个基于云的代码质量与安全服务。SonarCloud不仅对开源项目免费,还为私有项目提供了14天的免费试用。本文将指导您如何将SonarCl…

免费申请一张SSL证书-包含100个域名-挑战!!

挑战一下,申请一张包含100个域名的证书 首先,我们访问来此加密网站,进入登录页面,输入我的账号密码。登录后,咱们就可以开始申请证书,首先说一下,咱账号是SVIP哦,只有SVIP才可以申请包含100个域名的证书。为了方便验证,咱么先添加一下域名接口,这样可以自动配置验证信…

.net6+ 在单文件应用程序中获取程序集位置

一般来说,获取执行程序集的位置,您可以调用: var executableDirectory = System.Reflection.Assembly.GetExecutingAssembly().Location;如果发布为单个文件, 会提示如下警告 warning IL3000: System.Reflection.Assembly.Location always returns an empty string for assemb…

(set+拓扑排序) CF1572A Book

题意:思路: 每本书之间很明显存在拓扑关系,由此想到拓扑排序。使用set对图进行拓扑排序,将阅读次数小的放在前面,若阅读次数相同则按照阅读章节编号排序。假设第 x 章在第 y 章理解之后就能理解,若 x 大于 y 则本次阅读就可以理解 x 章,否则需要下一次才能理解第 x 章。 …

【github报错解决】Failed to connect to github.com port 443: Couldnt connect to server

今天使用github push时候报错的 解决办法: 1、查看本机代理 路径:设置->网络和Internet->代理->地址:端口 2、用git cmd修改配置,port就用刚刚代理端口值git config --global http.proxy http://127.0.0.1:[port] git config --global https.proxy http://127.0.0…

LVGL组件

LVGL组件的使用 目录LVGL组件的使用1 . 父和子对象2. 部件的基本属性及设置3. 图解:还有其他样式可以设置2. 组件分类 1 . 父和子对象2. 部件的基本属性及设置 /******** 设置打小 ********/ /******** 注意:设置部件位置时,坐标原点在父对象的左上角 ********/ lv_…

Maven 笔记

开发工具:Maven相关内容笔记# Maven简介 Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)) 这玩意儿是使用Java开发的,所以采用的就是Java的思想:面向对象 POM (Project Object Model):项目对象模型Maven的作用:项目构建:提供标准的、…

202406月度小结

这个学期比上个学期有意思得多了。但是为什么我只写了6月小结,没有写3月4月5月小结呢?因为那时候还没有想到用博客写这种小结形式的随笔啦…… 横向对比,这四个月都挺有意思的。但是由于我太容易忘记事情了……我的记忆是有限的,先把6月发生的趣事赶紧记录下来比较好。 昨天…

大模型技术方向Task1笔记

赛题概要 一、赛事背景 在当今数字化时代,企业积累了丰富的对话数据,这些数据不仅是客户与企业之间交流的记录,更是隐藏着宝贵信息的宝库。在这个背景下,群聊对话分角色要素提取成为了企业营销和服务的一项重要策略。 群聊对话分角色要素提取的理念是基于企业对话数据的深度…

[LeetCode] 122. Best Time to Buy and Sell Stock II

medium是你的谎言. class Solution:def maxProfit(self, prices: List[int]) -> int:#1if len(prices) == 1:return 0#elsemax_profit = 0min_price = prices[0]for i, element in enumerate(prices):#find a min_price if element <= min_price:min_price = elementelse…