程序代码篇---enumratemapraisezipfiter

devtools/2025/2/5 13:54:25/

文章目录

  • 前言
  • 第一部分:enumerate
    • 基本语法
    • 参数
      • iteraable
      • start
      • 返回值
    • 示例
    • 使用场景
  • 第二部分:map
    • 基本语法
      • function
      • iterable
    • 示例
  • 第三部分:raise
    • 基本语法
      • exception
      • value
      • traceback
    • 示例
    • 注意事项
    • 异常的用途
  • 第四部分:zip
    • 基本用法
    • 示例
    • 特点
      • 并行迭代
      • 最短长度
      • 解压操作
    • 常见用途
  • 第五部分:filter
    • 基本语法
      • function
      • iterable
    • 示例
    • 特点
      • 返回迭代器
      • 短路操作
      • 无副作用
    • 使用lambda表达式
    • 注意事项
  • 总结


前言

以上就是今天要讲的内容,本文仅仅简单介绍了enumratemapraisezipfilter函数。


第一部分:enumerate

在Python中,enumerate函数是一个内置函数,它用于将一个可迭代对象(如列表、元组、字符串等)转换为一个枚举对象,该对象在迭代时会同时返回索引和对应的元素。这在需要对可迭代对象中的元素进行编号时非常有用。

以下是enumerate函数的基本用法和详细说明:

基本语法

python">enumerate(iterable, start=0)

参数

iteraable

iterable: 一个可迭代对象,比如列表、元组、字符串等。

start

start: (可选)用于指定枚举序列的起始索引值,默认为0。

返回值

enumerate函数返回一个枚举对象,该对象生成包含索引和元素的元组

示例

下面是一个简单的例子,展示了如何使用enumerate函数:

python">fruits = ['apple', 'banana', 'cherry']for index, fruit in enumerate(fruits):print(f"Index: {index}, Fruit: {fruit}")
输出:Index: 0, Fruit: apple
Index: 1, Fruit: banana
Index: 2, Fruit: cherry

在上面的例子中,enumerate函数为列表fruits中的每个元素提供了一个索引,从默认的0开始。

自定义起始索引
如果你想要从非零的起始索引开始,可以传递start参数:

python">for index, fruit in enumerate(fruits, start=1):print(f"Index: {index}, Fruit: {fruit}")

输出:

Index: 1, Fruit: apple
Index: 2, Fruit: banana
Index: 3, Fruit: cherry
python">在元组和字典上的使用
enumerate也可以用于元组或字典:#元组
tuples = [(1, 'a'), (2, 'b'), (3, 'c')]
for index, (number, letter) in enumerate(tuples):print(f"Index: {index}, Number: {number}, Letter: {letter}")#字典
d = {'a': 1, 'b': 2, 'c': 3}
for index, (key, value) in enumerate(d.items()):print(f"Index: {index}, Key: {key}, Value: {value}")

使用场景

enumerate函数在以下场景中非常有用:

  1. 当需要同时访问列表中的元素和它们的索引时。
  2. 在需要修改列表元素时,而保留原始列表的副本
  3. 在需要对元素进行排序或分组,并且需要保留原始索引信息时
    enumerate函数是Python中处理可迭代对象的一个非常强大和灵活的工具。

map_96">第二部分:map

在Python中,.map() 函数是一个内置函数,它用于对可迭代对象(如列表、元组等)中的每个元素应用一个指定的函数,并返回一个迭代器,该迭代器产生应用函数后的结果。

基本语法

map(function, iterable, …)

function

function: 这是一个函数,用于处理可迭代对象中的每个元素。

iterable

iterable: 这是一个或多个可迭代对象,如列表、元组等。
.map() 函数将 function 应用于 iterable 中的每个元素,并返回结果的迭代器

示例

下面是一个简单的例子,其中我们将一个函数应用于一个列表的每个元素:

python">def square(x):return x ** 2numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
python">#因为map返回的是迭代器,所以我们可以将其转换为列表来查看结果
print(list(squared_numbers))
python">#输出: [1, 4, 9, 16, 25]
使用 lambda 表达式
.map() 函数经常与 lambda 表达式一起使用,以创建简洁的代码:numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x ** 2, numbers)
print(list(squared_numbers))
# 输出: [1, 4, 9, 16, 25]
python">处理多个可迭代对象
.map() 函数也可以接受多个可迭代对象,但函数必须能够接受与可迭代对象数量相同的参数:def add(a, b):return a + bnumbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]result = map(add, numbers1, numbers2)
print(list(result))
#输出: [5, 7, 9]
在上面的例子中,add 函数分别从 numbers1 和 numbers2 中取出元素,并将它们相加。

注意事项
.map() 函数返回的是一个迭代器,因此如果你想要查看所有的结果,你需要将其转换为列表或其他可迭代类型。
如果可迭代对象有不同的长度,.map() 函数将停止在第一个可迭代对象耗尽的位置

raise_155">第三部分:raise

在Python中,raise语句用于引发异常异常是程序执行过程中发生的错误或异常情况,它们可以是由程序代码显式引发的,也可以是由Python解释器在运行时检测到的错误自动引发的。使用raise语句可以控制何时以及如何引发异常,这对于错误处理和编写健壮的代码非常重要。

基本语法

raise [exception[, value[, traceback]]]

exception

exception: 必须是Exception类(或其子类)的一个实例。如果不提供,则默认引发RuntimeError。

value

value: 异常的初始值,通常是字符串,用于描述异常的详细信息。可选参数。

traceback

traceback: 是可选的(很少使用),代表调用栈,用于异常的回溯信息。通常在内部使用,开发者很少手动设置。

示例

下面是一些使用raise语句的例子:

python">引发内置异常
raise ValueError("Invalid value provided")
这将引发一个ValueError异常,并带有提供的错误信息。引发自定义异常
class CustomError(Exception):passraise CustomError("This is a custom error")
这里我们定义了一个自定义异常CustomError,然后使用raise语句引发它。
python">使用异常链
try:# 尝试执行某些操作raise ValueError("An error occurred")
except ValueError as e:# 捕获异常,并引发一个新的异常raise RuntimeError("Operation failed") from e
在这个例子中,我们捕获了一个ValueError异常,并立即引发了一个新的RuntimeError异常。通过使用from关键字,我们可以创建一个异常链,这样原始的异常信息不会丢失。

注意事项

  1. raise语句通常用于错误处理,当检测到错误或异常情况时,可以立即停止程序执行,并给出错误信息。
  2. 在except块中,使用raise可以重新引发当前捕获的异常,或者替换为另一个异常。
  3. 当引发异常时,如果没有指定异常实例,Python会自动创建一个Exception类的实例。
  4. 引发异常后,程序通常会停止执行,除非异常被try/except块捕获。
  5. 在自定义异常类时,建议继承自内置的Exception类或其子类。

异常的用途

  1. 在程序中检测到错误条件时,通过引发异常来通知调用者。
  2. 在函数或方法中,当接收到无效的参数时,引发异常来通知调用者。
  3. 在编写库或框架时,定义特定的异常来处理特定的错误情况。
  4. 使用raise语句可以使得错误处理更加明确和灵活,有助于编写易于理解和维护的代码。正确地使用异常处理机制,可以让程序在面对错误时更加健壮。

zip_207">第四部分:zip

在Python中,zip是一个内置函数,它用于将多个可迭代对象(如列表、元组、字符串或任何其他迭代器)作为输入,并返回一个迭代器,该迭代器生成由输入可迭代对象中的元素组成的元组。简单来说,zip函数可以用来并行迭代多个序列,并将对应的元素组合在一起。

基本用法

zip(*iterables)
iterables:一个或多个可迭代对象。

示例

python">#定义两个列表
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']#使用zip将两个列表组合在一起
zipped = zip(list1, list2)
python">#zip对象本身是一个迭代器
#可以将其转换为列表以查看结果
print(list(zipped))  # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]

特点

并行迭代

并行迭代:zip函数在内部并行迭代每个可迭代对象,每次迭代返回一个元组,元组中的元素来自每个输入可迭代对象。

最短长度

最短长度:zip函数会**停止迭代,当最短的可迭代对象耗尽时。**这意味着如果输入的可迭代对象长度不同,zip将不会生成与最长可迭代对象等长的元组。

python">list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(list(zipped))  # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]

#注意,list1中的元素4没有被包含在内

解压操作

解压操作:zip函数也可以用于解压操作,通过使用*操作符,可以将由zip生成的元组列表解压回原来的多个列表。

python">pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
unzipped = zip(*pairs)
print(list(unzipped))  # 输出: [(1, 2, 3), ('a', 'b', 'c')]

常见用途

  1. 并行处理多个列表:当需要同时处理多个列表或序列中的元素时,zip非常有用。
  2. 字典构造:可以与dict函数结合使用,快速构建字典
python">keys = ['a', 'b', 'c']
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print(dictionary)  # 输出: {'a': 1, 'b': 2, 'c': 3}

矩阵转置:可以将矩阵的行转换为列。

python">matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = list(zip(*matrix))
print(transposed)  # 输出: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

注意事项

  1. zip在Python 3中返回一个迭代器,而在Python 2中返回一个列表。
  2. 如果输入的可迭代对象长度不一致,zip不会填充缺失的值,而是简单地忽略掉超出最短长度的元素。
  3. 如果需要zip在其中一个可迭代对象耗尽时继续迭代,可以使用itertools.zip_longest函数。

filter_277">第五部分:filter

在Python中,filter是一个内置函数,它用于从**可迭代对象(如列表、元组、字符串等)**中筛选出满足特定条件的元素,并返回一个迭代器。这个函数接受两个参数:一个函数和一个可迭代对象。函数用于检查可迭代对象中的每个元素,返回值为True或False,表示是否保留该元素。

基本语法

filter(function, iterable)

function

function:用于测试可迭代对象中每个元素的函数。它应该接受一个参数,并返回一个布尔值。

iterable

iterable:一个可迭代对象,如列表、元组、集合或字符串。

示例

下面是一个简单的例子,使用filter函数过滤出列表中的偶数:

python">#定义一个函数,用于检查一个数是否为偶数
def is_even(num):return num % 2 == 0#定义一个列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]#使用filter函数过滤出偶数
even_numbers = filter(is_even, numbers)#filter函数返回的是一个迭代器,可以将其转换为列表来查看结果
print(list(even_numbers))  # 输出: [2, 4, 6, 8, 10]

特点

返回迭代器

返回迭代器:filter函数返回的是一个迭代器,而不是一个列表或其他序列类型。这意味着如果你想要一个列表,你需要手动将迭代器转换为列表

短路操作

短路操作:如果function是一个可调用对象,那么filter函数会在找到一个不满足条件的元素时停止迭代,因为后面的元素不会被包含在结果中

无副作用

无副作用:filter函数不会修改原始的可迭代对象,它返回一个新的迭代器

使用lambda表达式

filter函数经常与lambda表达式一起使用,以创建简洁的代码。下面是一个使用lambda表达式的例子:

python">#使用lambda表达式过滤出列表中的奇数
odd_numbers = filter(lambda x: x % 2 != 0, numbers)
print(list(odd_numbers))  # 输出: [1, 3, 5, 7, 9]

注意事项

  1. 在Python 3中,filter返回的是一个迭代器,而在Python 2中返回的是一个列表。
  2. 如果function是None,那么filter将表现得像iter函数,只返回可迭代对象中所有计算为True的元素。
  3. 如果可迭代对象为空,或者所有元素都不满足条件,filter将返回一个空的迭代器。
  4. 使用列表推导式作为替代
    在Python中,列表推导式经常被用作filter函数的替代,因为它们更易于阅读且通常更高效。以下是如何使用列表推导式来完成前面的例子:

#使用列表推导式过滤出偶数

python">even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)  # 输出: [2, 4, 6, 8, 10]
  1. 列表推导式在处理大型数据集时通常比filter函数更快,因为它们避免了函数调用的开销。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了enumratemapraisezipfilter函数。


http://www.ppmy.cn/devtools/156283.html

相关文章

Linux 信号机制

Linux 信号机制 一、Linux信号的基本概念二、怎么理解Linux信号机制三、Linux信号的用途四、Linux信号的原理五、Linux信号的处理方法1、默认处理2、忽略信号3、自定义信号处理 六、Linux信号处理的细节1、信号掩码2、实时信号3、Linux信号 Alarm 七、Linux信号处理库函数1. si…

深度学习与神经网络

最近看目标识别的文献,许多人工智能的概念把人搞得晕头转向。查了一些资料,总算明白点了。 深度学习泛指深度神经网络,就是有深度的神经网络,需要多层,是从单层、两层神经网络发展而来的。深度学习是机器学习的一种&a…

C++ 仿函数

仿函数定义 仿函数本质上就是类operator() 看上去仿佛是函数 实际是类 仿函数比函数更灵活 有自己的数据和成员变量 仿函数可以当作参数传递 仿函数比函数指针执行的更快(大多数情况下) 仿函数可以当作模板使用,…

自定义数据集 使用paddlepaddle框架实现逻辑回归

导入必要的库 import numpy as np import paddle import paddle.nn as nn 数据准备: seed1 paddle.seed(seed)# 1.散点输入 定义输入数据 data [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1], [1.5, 75.6…

防火墙安全策略实验

一、实验拓扑图及实验要求 实验要求: 1、VLAN2属于办公区;VLAN 3属于生产区。 2、办公区PC在工作日时间(周一至周五,早8到晚6)可以正常访问0A Server,其他时间不允许。 3、办公区可以在任意时刻访问web Server 4、生产…

嵌入式知识点总结 操作系统 专题提升(四)-上下文

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.上下文有哪些?怎么理解? 2.为什么会有上下文这种概念? 3.什么情况下进行用户态到内核态的切换? 4.中断上下文代码中有哪些注意事项? 5.请问线程需要保存哪些…

JavaScript面向对象编程:Prototype与Class的对比详解

JavaScript面向对象编程:Prototype与Class的对比详解 JavaScript面向对象编程:Prototype与Class的对比详解引言什么是JavaScript的面向对象编程?什么是Prototype?Prototype的定义Prototype的工作原理示例代码优点缺点 什么是JavaS…

UE5 蓝图学习计划 - Day 11:材质与特效

在游戏开发中,材质(Material)与特效(VFX) 是提升视觉体验的关键元素。Unreal Engine 5 提供了强大的 材质系统 和 粒子系统(Niagara),让开发者可以通过蓝图控制 动态材质、光效变化、…