学会拥抱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编程中被广泛应用,能够大大提高编程效率和代码质量。

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

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

相关文章

C++ 语法

一、头文件与源文件 头文件用于声明函数,类似于java中service层的接口; 源文件用于实现头文件函数,相当于java中serviceImpl层的实现类; 定义接口 实现接口 使用接口 二、指针概述 定义与使用 定义一个指针p用于存a变量的内存地址,即指针就是地址; 解引用可以获取或修改…

Android SurfaceFlinger——创建EGLContext(二十五)

前面文章我们获取了 EGL 的最优配置,创建了 EGLSurface 并与 Surface 进行了关联,然后还需要获取 OpenGL ES 的上下文 Context,这也是 EGL 控制接口的三要素(Displays、Contexts 和 Surfaces)之一。 1)getInternalDisplayToken:获取显示屏的 SurfaceControl 令牌(Token…

40岁以上的中年人很难找到工作

关注卢松松,会经常给你分享一些我的经验和观点。 你们有没有发现,90%的40岁以上的中年人,为了多挣钱,几乎除了吃饭和睡觉之外,都在拼命加班劳作,只要一停下来,心里就有一种内疚感,…

【Elasticsearch】Elasticsearch动态映射与静态映射详解

文章目录 📑前言一、Elasticsearch 映射概述1.1 什么是映射?1.2 映射的分类 二、动态映射2.1 动态映射的定义2.2 动态映射的优点2.3 动态映射的缺点2.4 动态映射的应用场景2.5 动态映射的配置示例 三、静态映射3.1 静态映射的定义3.2 静态映射的优点3.3 …

【篇三】在vue3上实现阿里云oss文件直传

之前写了两篇关于文件上传的文章 【篇一】使用springbootvue实现阿里云oss上传 【篇二】使用springbootvue实现阿里云oss文件直传,解决大文件分片上传问题 今天介绍一下在vue3中实现阿里云oss文件直传,主要是基于篇二中的源码进行修改,看具体…

机器学习简介--NLP(二)

机器学习简介 机器学习简介机器学习例子机器学习分类有监督学习有监督学习的应用 无监督学习 机器学习常见概念数据集k折交叉验证过拟合欠拟合评价指标 机器学习简介 机器学习例子 问题: 2,4,6,8,?&#…

【CV炼丹师勇闯力扣训练营 Day22:§7 回溯1】

CV炼丹师勇闯力扣训练营 代码随想录算法训练营第22天 回溯法其实就是暴力查找,回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合切割…

【Laravel生命周期全景】深入框架的心脏

标题:【Laravel生命周期全景】深入框架的心脏 Laravel是一个优雅的PHP Web框架,为现代Web应用程序的开发提供了丰富的功能和清晰的架构。理解Laravel的生命周期对于开发者来说至关重要,因为它涉及到应用程序从启动到响应请求的每一个环节。本…

Ubuntu18.04新安装--无网络连接、重启黑屏解决教程

一、安装Ubuntu Ubuntu安装需要U盘作为启动盘,在目前教新的电脑中选中GPT作为分区,制作启动盘,其中在安装双系统Ubuntu时,以自定义格式作为存储空间。详细安装过程以以及如何分区请参考下列链接:内含详细安装过程&…

VS Code 常用快捷键大全

Visual Studio Code 是目前最好用的代码编辑器之一。它提供了许多开箱即用的功能以及丰富的第三方扩展,本文将分享常用的 VS Code 快捷键,助你提高开发效率! 代码导航 跳转指定行:快速跳转到文件中的指定行,只需按下快…

Unity 数据持久化【PlayerPrefs】

1、数据持久化 文章目录 1、数据持久化PlayerPrefs基本方法1、PlayerPrefs概念2、存储相关3、读取相关4、删除数据思考 信息的存储和读取 PlayerPrefs存储位置1、PlayerPrefs存储的数据在哪个位置2、PlayerPrefs 数据唯一性思考 排行榜功能 2、Playerprefs实践1、必备知识点-反…

Java_网络通信:http和https

HTTP: 是互联网上应用最为广泛的一种网络通信协议,基于TCP,可以使浏览器工作更为高效,减少网络传输。 HTTPS: 是HTTP的加强版,可以认为是HTTPSSL(Secure Socket Layer)。在HTTP的基础上增加了一系列的安全…

Apache Flink 任意 JAR 包上传漏洞利用及防范策略

Apache Flink 任意 JAR 包上传漏洞利用及防范策略 引言 Apache Flink 是一个流行的开源流处理框架,由于其强大的流处理能力,被广泛应用于大数据处理领域。然而,近期发现 Apache Flink 1.9.1 版本存在一个严重的安全漏洞,允许攻击…

解决 Layout Inspector无法查看Component Tree 布局层级信息 | Android Studio Koala

问题描述 Tool -> Layout Inspector 显示下图,无法生成.li文件查看Component Tree,变成实时的Preview并功能点击操作,跟模拟器一样。 原因:默认勾选了"Enable embedded Layout Inspector",启用了嵌入式…

SpringCloud进阶篇

文章目录 网关快速入门创建模块引入依赖修改启动类配置路由路由过滤(一般不用) 自定义GlobalFilter登录校验登录校验过滤器 微服务获取用户信息保存用户信息到请求头拦截器获取用户信息 OpenFeign传递用户信息配置共享添加共享配置拉取共享配置 配置热更新添加配置到Nacos配置热…

数据结构初阶 堆的问题详解(三)

题目一 4.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( ) A 11 B 10 C 8 D 12 我们有最大的节点如下 假设最大高度为10 那么它的最多节点应该是有1023 假设最大高度为9 那么它的最多节点应该是 511 所以说这一题选B 题目二 …

AI算力需求激增:全球服务器市场迎来黄金发展期

AI算力需求的暴增正在推动全球服务器规模的快速增长。这一趋势主要源于人工智能(AI)技术的快速发展,特别是大模型算法的应用,使得智能算力需求激增。 麦肯锡预测,在AI大模型相关算力需求的快速增加推动下,以…

指挥中心操作台的形状及空间布局

在现代化的指挥中心,操作台的形状设计至关重要,它不仅影响着操作人员的工作效率和舒适度,还关系到整个指挥系统的运行效果。常见的指挥中心操作台形状多种多样,以满足不同的功能需求和空间布局。 直线型操作台 直线型操作台是最为…

AI芯片-系统架构师(二十二)

1、(重点)()中,编程开发人员分为首席程序员和“类”程序员。 A自适应软件开发(ASD) B极限编程(XP)开发方法 C开放统一过程开发方法(Open UP) …

如何在Java中实现Excel操作

如何在Java中实现Excel操作 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何在Java中实现对Excel文件的操作,这在日常的数据处…