HOWTO · Python
如何在 Python 中追加二维数组
学习如何使用原生列表和 NumPy 在 Python 中向二维数组追加值。本指南涵盖了 append()、extend()、numpy.append() 等方法,并附有针对行、列和动态数据的示例。是数据操作和数值计算的理想之选!
本页内容
在 Python 中向二维数组追加值是数据操作、数值计算和数据科学应用中的常见操作。无论你使用的是原生 Python 列表,还是为了效率使用 NumPy,都有多种方法可以向二维数组追加行、列或单个值。本指南探讨了不同的技术、它们的优势和使用场景。
使用嵌套列表(Python 列表)
Python 的内置列表可以将二维数组表示为列表的列表。追加值最简单的方法是使用 append() 方法。
追加新行
array = [[1, 2, 3], [4, 5, 6]]
array.append([7, 8, 9])
print(array)
输出:
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
此方法向现有列表添加一个全新的行。当你想通过随时间添加更多数据来动态扩展二维列表时,append() 方法非常有用。不过请注意,为了处理结构化数据,所有行可能需要具有相同的长度。
向现有行追加值
array[0].append(10)
print(array)
输出:
[[1, 2, 3, 10],
[4, 5, 6],
[7, 8, 9]]
此方法通过追加一个新元素来修改特定的行。与添加新行不同,此操作只影响指定的行,如果管理不当,可能会导致不规则的列结构。
使用列表推导式
列表推导式提供了一种优雅的方式,可以在二维列表的所有行中追加值。
array = [[1, 2], [3, 4]]
array = [row + [5] for row in array]
print(array)
输出:
[[1, 2, 5],
[3, 4, 5]]
此方法高效地为每一行添加一个新列。通过遍历每一行并追加一个值,列表推导式确保新列在所有行中均匀添加。
使用 NumPy 数组
NumPy 提供了强大的方法来高效地处理二维数组并向其追加值。但是,在处理包含许多空值的大型数据集时,使用稀疏矩阵可以显著减少内存消耗。了解更多关于 [Python 中的稀疏矩阵]({{relref “/HowTo/Python/sparse matrix in python.en.md”}}) 以及它们如何优化存储。
使用 numpy.append()
import numpy as np
array = np.array([[1, 2], [3, 4]])
array = np.append(array, [[5, 6]], axis=0)
print(array)
输出:
[[1 2]
[3 4]
[5 6]]
此方法向 NumPy 数组追加一个新行。numpy.append() 函数在处理大型数据集时非常有用,因为与原生 Python 列表相比,它能确保高效的内存管理。
要追加新列:
array = np.append(array, [[7], [8], [9]], axis=1)
print(array)
输出:
[[1 2 7]
[3 4 8]
[5 6 9]]
追加值之后,你可能需要将修改后的数组保存到文件中以备后用。你可以参阅我们的 [将数组写入文本文件]({{relref “/HowTo/Python/write array to a textfile.en.md”}}) 指南,了解高效存储 NumPy 数组的详细信息。
如果在修改 NumPy 数组时遇到索引错误,请参阅我们的 修复 ‘Too Many Indices for Array’ 错误 指南,以排查常见错误。
使用 numpy.hstack() 和 numpy.vstack()
NumPy 的 hstack() 和 vstack() 函数旨在高效地追加列和行。
使用 hstack() 追加列
import numpy as np
array = np.array([[1, 2], [3, 4]])
new_column = np.array([[5], [6]])
result = np.hstack((array, new_column))
print(result)
输出:
[[1 2 5]
[3 4 6]]
使用 vstack() 追加行
new_row = np.array([[5, 6]])
result = np.vstack((array, new_row))
print(result)
输出:
[[1 2]
[3 4]
[5 6]]
这些方法高效,并且在处理大型数据集时值得推荐。与可能需要重构整个数组的 numpy.append() 不同,hstack() 和 vstack() 分别针对列向和行向扩展进行了优化。
如果你处理的是结构化数值数据,你可能还需要转置矩阵以便高效地重塑数据。请查看我们的 在 Python 中转置矩阵 一文。
使用 += 运算符
array = [[1, 2], [3, 4]]
array += [[5, 6]]
print(array)
输出:
[[1, 2],
[3, 4],
[5, 6]]
此方法是 append() 的简写,但会就地修改列表。使用 += 可确保新行直接添加,而不创建新的引用,这使其成为处理小型二维列表的高效方法。
使用 extend() 追加多行
array = [[1, 2], [3, 4]]
array.extend([[5, 6], [7, 8]])
print(array)
输出:
[[1, 2],
[3, 4],
[5, 6],
[7, 8]]
这在一次添加多行时非常有用。extend() 方法在将来自不同来源的数据合并到单个二维列表中时特别有帮助。
如果你需要将更新后的列表存储为 CSV 文件,你可以查看我们的 在 Python 中将列表写入 CSV 文件 指南。
使用 insert() 在特定索引处添加行
array = [[1, 2], [3, 4]]
array.insert(1, [5, 6])
print(array)
输出:
[[1, 2],
[5, 6],
[3, 4]]
insert() 方法允许在数组内精确放置行。这在处理有序数据集时非常有用,因为新条目需要在不破坏整体结构的情况下插入到特定位置。
使用嵌套循环动态填充二维数组
array = []
for i in range(3):
row = []
for j in range(2):
row.append(i * j)
array.append(row)
print(array)
输出:
[[0, 0],
[0, 1],
[0, 2]]
此方法对于动态生成结构化二维数组非常有用。使用嵌套循环可以完全控制数据的填充方式,这使其成为以编程方式生成矩阵和基于网格的结构的理想之选。
结论
Python 提供了多种向二维数组追加值的方法。如果你使用的是标准列表,append()、extend() 和列表推导式都是有效的选择。对于高性能数值运算,NumPy 的 append()、hstack() 和 vstack() 提供了优化的解决方案。正确的方法取决于你处理的是小型列表还是大规模数值数据。
方法对比
| 方法 | 适用场景 | 灵活性 | 性能 |
|---|---|---|---|
append() |
添加行(Python 列表) | 高 | 中等 |
list comprehension |
添加列(Python 列表) | 中等 | 高 |
numpy.append() |
追加行/列(NumPy) | 高 | 高 |
hstack() / vstack() |
高效追加行/列(NumPy) | 高 | 非常高 |
+= 运算符 |
快速追加行(Python 列表) | 低 | 高 |
extend() |
追加多行(Python 列表) | 中等 | 高 |
insert() |
在特定索引处插入(Python 列表) | 中等 | 中等 |
| 嵌套循环 | 动态数据生成 | 高 | 可变 |