学会拥抱Python六剑客,提高编程效率
在Python语言中,有六个强大的工具,它们被称为"Python六剑客"。而Python六剑客指的是Python中常用的六种功能强大且灵活的工具,它们分别是“切片(Slicing),推导列表(List Comprehension),map映射函数,filter过滤器,reduce累积,lambda匿名函数”。
接下来,小编将详细解释每个工具,并提供相应的代码示例。
正文
1.切片(Slicing)
切片(Slicing):对于序列(如字符串、列表和元组)来说,切片是一种非常方便的操作。通过指定开始位置、结束位置和步长,可以轻松地提取序列中的子序列。例如,s[开始位置:结束位置:步长]。
在Python中,切片(slicing)是一种非常强大的工具,它允许你对序列类型(如列表、元组、字符串等)进行快速、简洁的子集操作。切片操作通过冒号(:)分隔的三个可选参数来指定:起始索引、结束索引和步长。
其基本语法如下所示:
sequence[start:stop:step]
sequence:要进行切片操作的序列,可以是列表、元组或字符串等;
start:切片开始的索引(包含)。如果是负数,则从序列的末尾开始计数。如果省略,则默认为0;
stop:切片结束的索引(不包含)。如果是负数,则从序列的末尾开始计数。如果省略,则默认为序列的长度;
step:切片步长,即每次操作跳过的元素个数。如果省略,则默认为1。如果为负数,则切片操作会从后向前进行。
用法举例如下:
# 字符串切片` `s = "Hello, World!"` `print(s[0:5]) # 输出: "Hello"` `print(s[7:]) # 输出: "World!"` `print(s[:5]) # 输出: "Hello"` `print(s[-1]) # 输出: "!"` `print(s[-6:-1]) # 输出: "World"` ` ``# 列表切片` `lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]` `print(lst[2:5]) # 输出: [2, 3, 4]` `print(lst[::2]) # 输出: [0, 2, 4, 6, 8]` `print(lst[::-1]) # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]` ` ``# 元组切片(与列表相同)` `tup = (10, 20, 30, 40, 50)` `print(tup[1:4]) # 输出: (20, 30, 40)` ` ``# 负数索引和步长` `print(lst[-3:-1]) # 输出: [7, 8]` `print(lst[::-2]) # 输出: [9, 7, 5, 3, 1]
在切片操作中,如果省略了start,则默认为0;如果省略了stop,则默认为序列的长度;如果省略了step,则默认为1。同时,Python的切片操作是“左闭右开”的,即包含起始索引,不包含结束索引。
切片不仅用于提取子序列,还可以用于修改原序列的部分内容,比如通过切片赋值来替换子序列的元素:
lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]` `lst[2:5] = [20, 30, 40]` `print(lst) # 输出: [0, 1, 20, 30, 40, 5, 6, 7, 8, 9]
在上面的例子中,lst中索引2到4(不包含5)的元素被新的列表[20, 30, 40]替换了。
2.推导列表(List Comprehension)
推导列表(List Comprehension):这是一种创建新列表的简洁方法,它通过在一个已有的列表或可迭代对象上进行操作,生成新的列表。例如,[表达式 for 项 in 可迭代对象 if 条件]。
列表推导式(List Comprehension)是Python中一种独特且强大的语法,它允许你以简洁的方式创建列表。列表推导式提供了一种快速构建新列表的方法,通过遍历一个或多个序列,并根据需要应用一些条件或转换。
列表推导式的基本语法如下:
[expression for item in iterable if conditional]
expression:对每个元素执行的表达式(通常是针对单个元素的运算)。
item:在迭代过程中使用的变量名。
iterable:可迭代对象,如列表、元组、字符串或任何实现了迭代协议的对象。
conditional:可选的条件语句,用于过滤元素。如果提供了条件,则只有使条件为真的元素才会被包括在内。
用法举例如下所示:
# 创建一个包含 1 到 10 的平方的列表` `squares = [x**2 for x in range(1, 11)]` `print(squares) # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]` ` ``# 创建一个包含 0 到 9 的偶数的列表` `even_numbers = [x for x in range(10) if x % 2 == 0]` `print(even_numbers) # 输出: [0, 2, 4, 6, 8]` ` ``# 创建一个包含字符串列表中所有字符串长度的列表` `words = ['apple', 'banana', 'cherry']` `word_lengths = [len(word) for word in words]` `print(word_lengths) # 输出: [5, 6, 6]` ` ``# 创建一个包含元组中所有元素平方的列表` `tuples = [(1, 2), (3, 4), (5, 6)]` `squared = [x**2 + y**2 for x, y in tuples]` `print(squared) # 输出: [5, 25, 61]` ` ``# 使用嵌套列表推导式创建一个二维列表` `matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]` `flattened = [element for row in matrix for element in row]` `print(flattened) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
列表推导式不仅简洁,而且执行速度通常比等效的循环和append()方法更快。这是因为列表推导式是在构建列表时就计算出所有元素,而循环和append()方法则需要逐个添加元素到列表中。
列表推导式是Python的一种非常强大的特性,它使得处理列表和其他可迭代对象变得更加容易和高效。
3.map映射函数
map映射函数:map()函数接收两个参数,一个是函数,一个是序列。map将传入的函数依次作用到序列的每个元素,并把结果作为新的列表返回。例如,map(函数, 序列)。
map() 是Python内置的一个高阶函数(higher-order function),它接受一个函数和一个或多个可迭代对象作为参数,并返回一个新的迭代器,该迭代器将函数应用到每个输入可迭代对象的对应元素上。map() 函数在内部迭代可迭代对象,并对每个元素执行提供的函数,然后返回结果的迭代器。
以下是 map() 函数的基本用法:
map(function, iterable, ...)
function:应用于每个元素的函数。
iterable:一个或多个可迭代对象,其中的元素将被作为 function 的参数。
下面是一些使用 map() 函数的例子:
# 定义一个函数,将列表中的每个元素平方` `def square(x): ``return x ** 2` ` ``# 使用 map() 函数将 square 应用到列表的每个元素上` `numbers = [1, 2, 3, 4, 5]` `squared_numbers = map(square, numbers)` ` ``# 注意:map() 返回一个迭代器,如果要打印结果,需要转换为列表或其他可迭代对象` `print(list(squared_numbers)) # 输出: [1, 4, 9, 16, 25]` ` ``# map() 也可以接受多个可迭代对象,并将函数应用于它们的对应元素` `def add(x, y): ``return x + y` ` ``# 使用 map() 将 add 应用到两个列表的对应元素上` `a = [1, 2, 3]` `b = [4, 5, 6]` `sums = map(add, a, b)` `print(list(sums)) # 输出: [5, 7, 9]
在上面的例子中,map() 函数将 square 函数应用到 numbers 列表的每个元素上,并返回一个新的迭代器 squared_numbers。当我们需要看到结果时,将迭代器转换为列表。同样,map() 也可以将 add 函数应用到两个列表 a 和 b 的对应元素上。
需要注意的是,map() 返回的是一个迭代器,如果你需要多次访问结果或者在一个不支持迭代器的上下文中使用结果(例如,在 print() 函数中直接打印),你需要将迭代器转换为列表或其他可迭代对象。这可以通过使用 list()、tuple() 或其他类似函数来实现。
4.filter过滤器
filter过滤器:filter()函数也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。例如,filter(函数, 序列)。
filter() 是Python的一个内置函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。filter() 函数接受两个参数,一个是函数,一个是序列。序列的每个元素作为参数传递给函数进行判定,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
其基本用法如下所示:
filter(function, iterable)
function:用于测试每个元素是否满足条件的函数。
iterable:可迭代对象,如列表、元组或字符串。
下面是一些使用 filter() 函数的例子:
# 定义一个函数,判断一个数是否为偶数` `def is_even(n): ``return n % 2 == 0` ` ``# 使用 filter() 函数过滤出列表中的偶数` `numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` `even_numbers = filter(is_even, numbers)` ` ``# 将 filter 对象转换为列表以打印结果` `print(list(even_numbers)) # 输出: [2, 4, 6, 8, 10]` ` ``# filter() 也可以用于字符串,过滤出所有大写字母` `def is_uppercase(c): ``return c.isupper()` ` ``# 使用 filter() 函数过滤出字符串中的大写字母` `text = "Hello, World!"` `uppercase_letters = filter(is_uppercase, text)` ` ``# 将 filter 对象转换为列表以打印结果` `print(list(uppercase_letters)) # 输出: ['H', 'W']
在上面的例子中,filter() 函数将 is_even 函数应用到 numbers 列表的每个元素上,并返回一个新的迭代器 even_numbers,该迭代器包含所有使 is_even 返回 True 的元素。同样,filter() 也被用于过滤出字符串中的所有大写字母。
需要注意的是,filter() 返回的是一个迭代器,如果你需要多次访问结果或者在一个不支持迭代器的上下文中使用结果(例如,在 print() 函数中直接打印),你需要将迭代器转换为列表或其他可迭代对象。这可以通过使用 list()、Tuple() 或其他类似函数来实现。
5.reduce累积
reduce累积:reduce()函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用func函数运算,以此类推,最后得到一个结果。例如,reduce(函数, 序列)。
在Python中,reduce() 函数是 functools 模块的一部分,用于对参数序列中元素进行累积。reduce() 函数会对参数序列中元素进行下列操作:对参数序列中元素进行下列操作:用传给 reduce() 中的函数 func(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 func 函数运算,以此类推,最后得到一个结果。
下面是一个使用 reduce() 进行累积操作的例子:
from functools import reduce` ` ``# 定义一个函数,用于将两个数相加` `def add(x, y): ``return x + y` ` ``# 定义一个数字列表` `numbers = [1, 2, 3, 4, 5]` ` ``# 使用 reduce 对列表中的数字进行累积相加` `sum_of_numbers = reduce(add, numbers)` ` ``print(sum_of_numbers) # 输出: 15
在这个例子中,reduce(add, numbers) 会执行以下操作:
add(1, 2) -> 3
add(3, 3) -> 6
add(6, 4) -> 10
add(10, 5) -> 15
最终,reduce() 函数返回累积相加的结果15。
需要注意的是,在Python3 中,reduce() 不再是内置函数,而是位于 functools 模块中,因此你需要导入这个模块才能使用它。在Python2中,reduce() 是一个内置函数。
6.lambda匿名函数
lambda匿名函数:lambda函数是一种小型匿名函数,可以接受任何数量的参数,但只能有一个表达式。lambda函数的语法是lambda 参数: 表达式。
在Python中,lambda 是一个关键字,用于定义匿名函数(也称为一行函数或内联函数)。匿名函数是指那些没有名字的函数,它们通常用于需要一个函数作为参数传递给另一个函数的情况,或者用于定义一些简单的、一次性的函数。
lambda 表达式可以包含任意数量的参数,但只能有一个表达式。这个表达式就是该匿名函数的返回值。
下面是一个 lambda 函数的基本语法:
lambda arguments: expression
这里 arguments 是函数的参数,用逗号分隔,而 expression 是返回值的表达式。
如下所示,是一些lambda函数的例子:
# 一个简单的加法函数``add = lambda x, y: x + y` `print(add(3, 4)) # 输出: 7`` ``# 判断一个数是否为偶数``is_even = lambda x: x % 2 == 0` `print(is_even(4)) # 输出: True` `print(is_even(5)) # 输出: False`` ``# 过滤列表中的偶数``numbers = [1, 2, 3, 4, 5, 6]` `even_numbers = list(filter(lambda x: x % 2 == 0, numbers))` `print(even_numbers) # 输出: [2, 4, 6]`` ``# 排序字符串列表,按字符串长度``words = ['apple', 'banana', 'cherry', 'date']` `sorted_words = sorted(words, key=lambda word: len(word))` `print(sorted_words) # 输出: ['date', 'apple', 'cherry', 'banana']
lambda函数在Python编程中非常有用,特别是在需要简短函数的地方,如 map(), filter(), 和 sorted() 等函数的参数中。它们提供了一种简洁的方式来定义和传递函数。然而,对于更复杂的功能,通常建议定义一个具名函数,因为它更易于阅读和维护。
总的来说,这六种工具在Python编程中被广泛应用,能够大大提高编程效率和代码质量。
相关文章:
学会拥抱Python六剑客,提高编程效率
在Python语言中,有六个强大的工具,它们被称为"Python六剑客"。而Python六剑客指的是Python中常用的六种功能强大且灵活的工具,它们分别是“切片(Slicing),推导列表(List Comprehensio…...
mysql 根据当前时间筛选某个时间范围内的数据
1.根据天数筛选 SELECT * FROM coupons WHERE NOW() BETWEEN start_time AND end_time; 在这个查询中,NOW()函数返回当前的日期和时间。BETWEEN操作符用于检查NOW()返回的当前时间是否在start_time和end_time之间(包括这两个时间)。 注意&a…...
Linux 常用指令详解
Linux 是一个强大而灵活的操作系统,掌握常用的 Linux 指令是使用和管理 Linux 系统的基础。本文将介绍一些常用的 Linux 指令,并附上 Vim 和 g 的常用指令说明,帮助你更好地进行开发和操作。 1. 基本文件操作指令 1.1 显示目录内容 ls常用…...

【简单讲解下npm常用命令】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
Header Location重定向机制解析与应用
Header Location重定向机制解析与应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨HTTP中的Header Location重定向机制,以及在…...

硅纪元AI应用推荐 | 国产创作引擎即梦AI助力创作者探索创作新境界
“硅纪元AI应用推荐”栏目,为您精选最新、最实用的人工智能应用,无论您是AI发烧友还是新手,都能在这里找到提升生活和工作的利器。与我们一起探索AI的无限可能,开启智慧新时代! 在人工智能快速发展的今天,各…...
使用TableGeneration生成已标注的表格数据用于表格识别
利用 TableGeneration 生成多样化表格数据 TableGeneration 简介环境准备chrome浏览器(Linux下推荐)火狐浏览器(Mac下推荐) 生成表格生成表格 参数说明结论 在数据生成和处理领域,表格数据的生成是一个常见需求,尤其是在机器学习和数据分析领域。今天&am…...

赛目科技三度递表:净利率及资产回报率不断下滑,经营成本越来越高
《港湾商业观察》施子夫 5月29日,北京赛目科技股份有限公司(以下简称,赛目科技)第三次递表港交所,公司拟主板上市,独家保荐机构为光银国际。 公开信息显示,赛目科技此前曾于2022年12月&#x…...

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda
目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…...
Java中的安全编码实践与防御技巧
Java中的安全编码实践与防御技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨Java中的安全编码实践与防御技巧,这对于开发人员来说…...
linux 常用的命令、文件路径、其他工具或软件包
命令 sudo apt dist-upgrade 解决显示 暂不升级、未被升级dd if/dev/zero of./rootfs.img bs1G count6 制作一个 6G 的空白镜像。bs 是块字节数,count 是 bs 的个数。dd if./rootfs.img of/dev/sdc2 bs512 烧录 rootfs.img 镜像到 /dev/sdc2。bs 是 512 个字节&…...

00 如何根据规律在变化中求发展?
你好,我是周大壮。目前,我已在搜索推荐等算法技术领域从事研发近 10 年,做过诸多流量分发领域的算法技术工作。 如今任 58 同城的算法架构师、技术委员会人工智能分会委员、58 本地服务事业群算法策略部负责人,我主要负责 58 集团…...
UUID和自增ID做主键到底哪个好?
UUID(通用唯一识别码) 优点: 全局唯一性:由不同算法生成,确保全球范围内的唯一性,避免主键冲突。不可预测性:随机生成,难以被猜测,适合保密性应用。分布式应用࿱…...
FW SystemUI Keyguard解析(二)
文章目录 CTS之Keyguard Menu事件处理 CTS之Keyguard Menu事件处理 事件触发点: NotificationShadeWindowViewController.dispatchKeyEvent 设置setInteractionEventHandler回调之后通过NotificationShadeWindowView 触发 调用到return mService.onMenuPressed(); public cla…...

MySQL之备份与恢复(二)
备份与恢复 定义恢复需求 如果一切正常,那么永远也不需要考虑恢复。但是,一旦需要恢复,只有世界上最好的备份系统是没用的,还需要一个强大的恢复系统。 不幸的是,让备份系统平滑工作比构造良好的恢复过程和工具更容易…...

MySQL:保护数据库
保护数据库 1. 用户1.1 创建用户1.2 查看用户1.3 删除用户1.4 修改密码 2. 权限2.1 授予权限2.2 查看权限2.3 撤销权限 之前都是介绍本地数据库而你自己就是数据库的唯一用户,所以不必考虑安全问题。但实际业务中数据库大多放在服务器里,你必须妥善处理好…...

不是大厂云用不起,而是五洛云更有性价比
明月代维的一个客户的大厂云境外云服务器再有几天就到期了,续费提醒那是提前一周准时到来,但是看到客户发来的续费价格截图,我是真的没忍住。这不就是在杀熟吗?就这配置续费竟然如此昂贵?说实话这个客户的服务器代维是…...

C++初学者指南-3.自定义类型(第一部分)-异常
C初学者指南-3.自定义类型(第一部分)-异常 文章目录 C初学者指南-3.自定义类型(第一部分)-异常简介什么是异常?第一个示例用途:报告违反规则的行为异常的替代方案标准库异常处理 问题和保证资源泄露使用 RAII 避免内存泄漏!析构函数:不要让异…...

学会python——用python编写一个电子时钟(python实例十七)
目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.电子时钟程序 3.1 代码构思 3.2代码实例 3.3运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性…...

elementui中@click短时间内多次触发,@click重复点击,做不允许重复点击处理
click快速点击,发生多次触发 2.代码示例: //html<el-button :loading"submitLoading" type"primary" click"submitForm">确 定</el-button>data() {return {submitLoading:false,}}//方法/** 提交按钮 */sub…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...