如何使用 Python 将矩阵行中的元素与后元素配对?
在某些编程场景中,您可能遇到过需要将行中矩阵的每个元素与后元素配对的情况,换句话说,就是紧跟在数字后面的元素。因此,在本文中,我们将介绍一些根据条件配对元素的方法和示例。
矩阵
这些是功能强大的数据结构,用于表示按行和列组织的元素集合。例如,具有 n 行和 m 列的矩阵将被称为 n * m 矩阵。
以下是我们可以执行的一些方法来配对矩阵的元素。
嵌套循环
这是一种简单而基本的方法,大多数开发人员都会想到它。这里我们可以使用嵌套循环来迭代矩阵的每一行。在内循环中,我们从行的第一个元素迭代到倒数第二个元素,因为最后一个元素之后没有后续元素。curr 和 nxt 变量存储当前元素和其后的元素(即后元素)。
示例
mat= [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] def pair_with_rear(mat): for row in mat: for i in range(len(row) - 1): curr = row[i] nxt = row[i + 1] print(f"Pair: {curr} - {nxt}") pair_with_rear(mat)
列表推导
此方法使用列表推导来创建一对元素。此推导遍历矩阵中的每一行,并在每一行中使用存储在配对列表中的 (row[i], row[i+1]) 将每个元素与后面的元素配对。
示例
mat = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] def pair_with_rear(mat): pairs = [(row[i], row[i + 1]) for row in mat for i in range(len(row) - 1)] for pair in pairs: print(f"Pair: {pair[0]} - {pair[1]}") pair_with_rear(mat)
输出
Pair: 1 - 2 Pair: 2 - 3 Pair: 4 - 5 Pair: 5 - 6 Pair: 7 - 8 Pair: 8 - 9
列表压缩和 Zip 方法
此方法使用 zip() 函数与列表推导式结合来配对每个行元素。此函数从每次迭代中获取元素(在下面的程序中,它是当前行和切片行,其中包含来自第二个位置的元素)并将它们组合成元组,这些元组将存储在配对列表中。
示例
mat = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] def pair_with_rear(mat): pairs = [(curr, nxt) for row in mat for curr, nxt in zip(row, row[1:])] for pair in pairs: print(f"Pair: {pair[0]} - {pair[1]}") pair_with_rear(mat)
Pair: 1 - 2 Pair: 2 - 3 Pair: 4 - 5 Pair: 5 - 6 Pair: 7 - 8 Pair: 8 - 9
NumPy 库
我们使用 NumPy 库来高效处理矩阵。首先,我们使用 np.array(mat).flatten() 将矩阵展平,将其转换为一维数组。然后使用列表推导,通过迭代展平的数组来创建对,并将每个元素与其后方或后续元素配对。
示例
import numpy as np mat = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] def pair_with_rear(matrix): flattened_matrix = np.array(matrix).flatten() pairs = [(flattened_matrix[i], flattened_matrix[i + 1]) for i in range(len(flattened_matrix) - 1)] for pair in pairs: print(f"Pair: {pair[0]} - {pair[1]}") pair_with_rear(mat)
输出
Pair: 1 - 2 Pair: 2 - 3 Pair: 3 - 4 Pair: 4 - 5 Pair: 5 - 6 Pair: 6 - 7 Pair: 7 - 8 Pair: 8 - 9
Itertools Linerary
我们使用 Itertools 库来处理配对操作。与此方法中的 Numpy 库方法类似,我们还将数组展平为 1D 矩阵,并将矩阵的所有行连接成单个 1D 可迭代数组。然后使用列表推导,通过迭代展平列表来创建配对,其中当前元素用 flatten_mat[i] 表示,下一个元素用 flatten_mat[i+1] 表示,存储在配对列表中。
示例
import itertools mat = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] def pair_with_rear(matrix): flattened_matrix = list(itertools.chain.from_iterable(matrix)) pairs = [(flattened_matrix[i], flattened_matrix[i + 1]) for i in range(len(flattened_matrix) - 1)] for pair in pairs: print(f"Pair: {pair[0]} - {pair[1]}") pair_with_rear(mat)
输出
Pair: 1 - 2 Pair: 2 - 3 Pair: 3 - 4 Pair: 4 - 5 Pair: 5 - 6 Pair: 6 - 7 Pair: 7 - 8 Pair: 8 - 9
因此,您可以选择任何您觉得合适的方法。每种方法都提供了将元素与其后置/后续元素配对的方法。