如何使用 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])** 将每个元素与其后面的元素配对,并将结果存储在 pairs 列表中。

示例

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()** 函数与列表推导式结合使用来配对每一行元素。此函数获取每次迭代中的元素(在下面的程序中,它是当前行和从第二个位置开始的切片行),并将它们组合成元组,这些元组将存储在 pairs 列表中。

示例

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()** 将矩阵展平为 1D 数组。然后,使用列表推导式,我们通过迭代展平后的数组并将其中的每个元素与其后面的或后续元素配对来创建对。

示例

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 库

我们使用 **Itertools** 库来处理配对操作。与 NumPy 库方法类似,在此方法中,我们也首先将数组展平为 1D 矩阵,并将矩阵的所有行连接到单个 1D 可迭代数组中。然后,使用列表推导式,通过迭代展平后的列表来创建对,其中当前元素由 **flatten_mat[i]** 表示,下一个元素由 **flatten_mat[i+1]** 表示,并将结果存储在 pairs 列表中。

示例

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

因此,您可以选择任何您觉得舒适的方法。每种方法都提供了一种将元素与其后面/后续元素配对的方式。

更新于: 2023年10月11日

103 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告