将函数应用于Python列表中每个元素

2025年1月5日 | 阅读8分钟

编程中的函数在封装可重用代码块方面起着至关重要的作用。在 Python 中,将函数应用于列表的每个元素涉及使用函数定义的特定操作或转换来系统地处理列表中的每个项。当对列表中的每个元素执行统一的计算或修改时,此方法特别有用。在本文中,我们将探讨使用 Python 将函数应用于列表每个元素的各种方法。

  1. 使用 map() 函数
  2. 使用 for 循环
  3. 使用 Lambda 函数
  4. 使用列表推导式
Apply Function to Each Element of a List in Python

使用 map() 函数

Python 中的 `map()` 函数是一个有用的内置函数,它将一个指定函数应用于可迭代对象(如列表、元组或字符串)中的所有项。然后,它返回一个生成结果值的迭代器。

语法

map() 函数的通用语法如下:

  • Function: 要应用于可迭代对象中每个项的函数。
  • Iterable: 将由函数处理其元素的(例如列表、元组、字符串)可迭代对象。

`map()` 函数将提供的函数应用于可迭代对象的每个元素,并返回一个包含结果的迭代器。要获取最终的列表输出,可以使用 `list()` 方法将迭代器转换为列表。

示例 1

以下是一个使用 map() 函数对列表中每个元素进行求立方操作的简单示例:

程序

输出

[1, 8, 27, 64, 125]

说明

上面的程序很简单,用于展示 map 函数将函数应用于每个元素的使用。在这里,我们定义了一个名为“cube_number”的函数,该函数接受整数元素并返回数字的立方。使用 map,我们将列表的元素修改为数字的立方。

示例 2

这是一个将数字转换为其字符串表示形式的示例程序:

程序

输出

['10', '20', '30', '40', '50']

说明

在这里,我们定义了一个名为“convert_to_string”的函数,该函数接受一个整数作为输入,并使用 str 方法将整数元素转换为字符串。然后使用 map() 将“convert_to_string”函数应用于“original_list”中的每个整数。

使用 for 循环

在编程中,我们经常使用循环。将函数应用于列表中每个元素的一种最佳方法是通过 for 循环。

示例 1

让我们通过一个 for 循环示例程序来看看。

程序

输出

[1000, 2000, 3000, 4000, 5000]

说明

我们使用 for 循环通过迭代列表并将修改后的元素存储在结果列表中来对每个元素应用函数。最后,打印结果列表。

使用 Lambda 函数

Lambda 函数是 Python 中使用 lambda 关键字定义的、小型的、匿名的函数。当操作简短、简单且不需要完整的函数定义时,通常使用 Lambda 函数。Lambda 函数的通用语法为:

这里,arguments 是输入参数,expression 是要执行的操作。

示例

因此,让我们来看一个对列表中的每个元素进行平方操作的示例程序。程序

输出

[1, 4, 9, 16, 25]

说明

我们没有创建新函数,而是使用了 lambda 关键字来执行相同的功能。lambda 函数 `lambda x: x ** 2` 等同于一个计算其输入的平方的常规函数。`map()` 函数将此 lambda 函数应用于 `original_list` 中的每个元素,从而生成一个包含平方值的新列表(`result_list`)。

示例

这是一个从列表中过滤偶数的示例程序:

程序

输出

Original Numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Even Numbers: [2, 4, 6, 8, 10]

说明

在此程序中,我们创建了一个 lambda 函数来检查数字是否为偶数。然后,`filter` 函数将此条件应用于 `numbers` 列表中的每个元素,并仅将满足条件的元素包含在新列表 `even_numbers` 中。

使用列表推导式

列表推导式是 Python 中创建列表的简洁方法。它提供了一种更具可读性和表现力的方式,只需一行代码即可指定要包含的元素来生成列表。

列表推导式对于将函数应用于每个元素很有好处。

列表推导式的基本语法是:

  • Expression: 要对每个项目执行的操作。
  • Item: 表示可迭代对象中每个元素的变量。
  • Iterable: 你要迭代的元素序列(例如,列表、元组或字符串)。
  • Condition (optional): 一个过滤器,仅包含条件为 True 的项目。

示例

让我们来看一个关于列表推导式的示例程序:

程序

输出

[('Alice', 5), ('Bob', 3), ('Charlie', 7), ('Deol', 4)]

说明

该程序使用列表推导式生成一个名为“name_lengths”的新列表。列表推导式遍历“names”列表中的每个元素(`name`),并为每个名称创建一个元组(`name`, `len(name)`)。`len(name)` 计算每个名称的长度。

示例 2

让我们看一个使用列表推导式从给定列表中过滤偶数的示例:

程序

输出

[2, 4, 6, 8, 10]

说明

此程序使用列表推导式创建一个名为 `even_numbers` 的新列表。列表推导式遍历 `numbers` 列表中的每个元素(`x`),并且仅包含满足 `x % 2 == 0` 条件的那些元素。换句话说,它过滤掉了奇数,只留下新列表中的偶数。

`x` 代表 `numbers` 列表中的每个元素。如果 `x` 是偶数,则满足 `x % 2 == 0` 条件。

使用 Pandas

apply() 函数

作为数据处理和分析的流行库,您可以使用 apply() 函数将函数应用于 DataFrame 的每个列元素。

Pandas 中的 apply() 函数是一种有益且灵活的方法,可将函数应用于 DataFrame 的轴(即行或列)或特定 Series。当对每个 DataFrame 或 Series 元素执行自定义操作时,它特别有用。

示例

让我们考虑一个使用 apply 函数将函数应用于 DataFrame 中每个元素的简单程序:

程序

输出

Numbers Squared Numbers
0 	     1        1
1 	     2        4
2 	     3        9
3        4        16
4        5        25

说明

首先,我们利用 pandas 库创建了一个 DataFrame。在此之后,我们开发了一个计算数字平方的函数。接下来,我们使用 apply 函数将平方函数应用于“Numbers”列中的每个元素。此操作的输出随后被分配给一个名为“Squared Numbers”的新列。然后我们打印。

applymap() 函数

Pandas 中的 `applymap()` 函数可以将特定函数应用于 DataFrame 中的每个元素。它不同于用于逐元素操作的 `apply()` 函数,后者仅用于 Series(单列或单行)。相比之下,`applymap()` 函数逐元素地操作整个 DataFrame。

示例

让我们看一个如何区分 apply map 和 apply 函数的示例程序:

程序

输出

   A   B   C
0  1  16  49
1  4  25  64
2  9  36  81

说明

在此程序中,我们定义了一个名为 `square` 的函数,该函数接受一个整数作为输入并返回其平方。

我们使用 `applymap()` 方法将 `square` 函数应用于 DataFrame `df` 的每个元素。这意味着 DataFrame 中每个单元格中的每个值都被平方了。

何时应使用 apply() 和 applymap() 函数?

当您想沿 DataFrame 的行或列应用函数时,请使用 **apply()**。

当您想将函数应用于整个 DataFrame 的每个元素时,请使用 **applymap()**。

使用 Numpy

NumPy 是一个 Python 编程语言库,它支持大型多维数组。

Numpy vectorize()

NumPy vectorize 是 NumPy 库中的一个函数,它允许常规 Python 函数通过逐元素应用来与 NumPy 数组一起工作。这是增强 Python 函数与 NumPy 数组配合使用的功能的一种便捷方式。

程序

输出

[ 1  8 27 64]

说明

在此示例中,定义了 `cube` 函数来计算给定数字的立方。然后使用 `numpy.vectorize` 函数创建该函数的向量化版本(`vectorized_cube`)。最后,将向量化函数应用于 NumPy 数组(`arr`),创建一个新数组,其中每个元素都进行了立方计算。

结论

将自定义函数应用于列表中的每个元素是操作数据的强大方法。它提供了灵活性,并允许以简洁的方式表达复杂的转换。当您执行逐元素操作时,代码会更具可读性和表现力,并且您无需使用显式循环。此方法在使用大型数据集或复杂数据结构时尤其有益。

但是,根据任务的不同,探索其他方法(例如列表推导式、NumPy 函数或其他内置 Python 函数)是值得的。您应该选择最符合您用例特定需求和性能考虑因素的方法。

总而言之,将函数应用于列表中的每个元素是一项常见操作,它在数据处理任务中平衡了灵活性、可读性和自定义性。