学会拥抱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…...

助力游戏实现应用内运营闭环,融云游戏社交方案升级!
通信能力在所有应用场景都是必备组件,这源于社交属性带给应用的增长神话。 在游戏场景,玩家从少数核心向大众用户泛化扩展的过程,就是游戏深度融合社交能力的过程。 从单机到联机,游戏乐趣的升级 1996 年,游戏界顶流…...

守护创新之魂:源代码防泄漏的终极策略
在信息化快速发展的今天,企业的核心机密数据,尤其是源代码,成为了企业竞争力的关键所在。然而,源代码的泄露风险也随之增加,给企业的安全和发展带来了巨大威胁。在这样的背景下,SDC沙盒作为一种创新的源代码…...

Halcon 基于分水岭的目标分割
一 分水岭 1 分水岭介绍 传统的分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是地质学上的拓扑地貌,图像中每一像素的灰度值表示该点的海拔高度,每一个局部极小值及其周边区域称为集水盆地&…...

PHP 面向对象编程(OOP)入门指南
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,通过使用对象来设计和组织代码。PHP作为一种广泛使用的服务器端脚本语言,支持面向对象编程。本文将介绍PHP面向对象编程的基本概念和用法࿰…...

Django学习第三天
python manage.py runserver 使用以上的命令启动项目 实现新建用户数据功能 views.py文件代码 from django.shortcuts import render, redirect from app01 import models# Create your views here. def depart_list(request):""" 部门列表 ""&qu…...

Vue3实现点击按钮实现文字变色
1.动态样式实现 1.1核心代码解释: class"power-station-perspective-item-text": 为这个 span 元素添加了一个 CSS 类,以便对其样式进行定义。 click"clickItem(item.id)": 这是一个 Vue 事件绑定。当用户点…...

深入理解Vue生命周期钩子函数
深入理解Vue生命周期钩子函数 Vue.js 是一款流行的前端框架,通过其强大的响应式数据绑定和组件化的开发方式,使得前端开发变得更加简单和高效。在Vue应用中,每个组件都有其生命周期,这些生命周期钩子函数允许开发者在不同阶段执行…...

Linux-gdb
目录 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 4.快速跳出函数体 5.其他 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 断点的本质是帮助我们缩小出问题的范围 比如,…...

Oracle分析表和索引(analyze)
分析表 analyze table tablename compute statistics; 分析索引 analyze index indexname compute statistics; 该语句生成的统计信息会更新user_tables这个视图的统计信息,分析的结果被Oracle用于基于成本的优化生成更好的查询计划 对于使用CBO(Cost-Base Optimization)很有好…...

MyBatis踩坑记录-多表关联字段相同,字段数据覆盖问题
MyBatis踩坑记录-多表关联字段相同,字段数据覆盖问题 1. 背景描述2. 实体记录3. 错误映射3.1 造成的影响 4. 解决办法4.1 修改映射文件 5. 修复后的效果5.1 返回的数据5.2 正确展示 7. end ~ 1. 背景描述 现有一下业务,单个任务下可能会有多个子任务&am…...