学会拥抱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…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
