Python - 在二维数组中将某列设置为特定值的最佳方法

11 投票
5 回答
42212 浏览
提问于 2025-04-15 18:56

我有一个二维数组,我想把某一列设置成一个特定的值,下面是我的代码。这是用Python实现的最好方法吗?

rows = 5
cols = 10

data = (rows * cols) *[0]
val = 10
set_col = 5

for row in range(rows):
    data[row * cols + set_col - 1] = val

如果我想把多列设置成特定的值,我该怎么做呢?

我只想使用Python的标准库。

谢谢!

5 个回答

0

你现在使用的方式没有什么本质上的问题,只是如果你把变量命名为set_col而不是set_row,会让人更容易理解,因为你是在设置列。

如果想设置多个列,只需要再加一个循环就可以了:

for set_col in [...columns that have to be set...]

不过有一点需要注意:你的二维数组有点特别,因为它是放在一个一维数组里的(在Python中,二维数组也可以通过列表的列表来实现),所以我建议把这些操作封装成方法或函数。

29

NumPy这个包提供了强大的N维数组对象。如果data是一个numpy数组,那么要把set_col这一列的值设置为val,可以这样做:

data[:, set_col] = val

完整示例:

>>> import numpy as np
>>> a = np.arange(10)
>>> a.shape = (5,2)
>>> a
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
>>> a[:,1] = -1
>>> a
array([[ 0, -1],
       [ 2, -1],
       [ 4, -1],
       [ 6, -1],
       [ 8, -1]])
15

一个更好的解决方案是:

data = [[0] * cols for i in range(rows)]

对于 cols = 2rows = 3 的值,我们会得到:

data = [[0, 0],
        [0, 0],
        [0, 0]]

然后你可以这样访问它:

v = data[row][col]

这就会得到:

val = 10
set_col = 5

for row in range(rows):
    data[row][set_col] = val

或者更符合Python风格的写法(感谢 J.F. Sebastian):

for row in data:
    row[set_col] = val

撰写回答