如何使用 Python 将矩阵行中的元素与后元素配对?

pythonserver side programmingprogramming

在某些编程场景中,您可能遇到过需要将行中矩阵的每个元素与后元素配对的情况,换句话说,就是紧跟在数字后面的元素。因此,在本文中,我们将介绍一些根据条件配对元素的方法和示例。

矩阵

这些是功能强大的数据结构,用于表示按行和列组织的元素集合。例如,具有 n 行和 m 列的矩阵将被称为 n * m 矩阵。

以下是我们可以执行的一些方法来配对矩阵的元素。

嵌套循环

这是一种简单而基本的方法,大多数开发人员都会想到它。这里我们可以使用嵌套循环来迭代矩阵的每一行。在内循环中,我们从行的第一个元素迭代到倒数第二个元素,因为最后一个元素之后没有后续元素。currnxt 变量存储当前元素和其后的元素(即后元素)。

示例

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

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


相关文章