2

所以我有一个二维整数列表,我想分别将一个较小的二维列表分配到第一个列表中。我的意思是,如果第一个列表a是这样的:

[[2, 2 , 2 , 2 ]
,[2, 2 , 2 , 2 ]
,[2, 2, 2, 2]]

我想分配这个列表

[[1,1,1]
,[1,1,1]] (实际上是 [[1]*3]*2)

到位置 [0:2][1:4] 的第一个列表a那么它应该变成

[[2, 1 , 1 , 1 ]
,[2, 1 , 1 , 1 ]
,[2, 2, 2, 2]]

我目前正在使用这段代码

for i in range(0,2):
    a[i][1:4]=[1]*3

,它使用一维浅拷贝 [?:?] 列表赋值。
那么有没有办法得到一个子二维列表,比如 a[i:y][j:z] ?
非常感谢。

4

2 回答 2

3

Python 列表无法做到这一点。列表从根本上面向一维操作。不过, NumPy数组对各种多维操作都有很好的支持。使用数组,你可以做

a[:2, 1:] = 1

并将数字 1 分配给多维子数组中的所有位置。如果您正在执行大量数组操作,请检查一下。

于 2013-07-25T03:51:56.763 回答
0

如果您正在寻找代码的简洁性,为什么不为它创建自己的函数呢?

def set_items(arr, val, x_lims, y_lims):
    for i in range(x_lims[0], x_lims[1]):
        arr[i][y_lims[0]:y_lims[1]] = val

set_items(a, [1]*3, [0, 2], [1, 4])
于 2013-07-25T04:15:49.477 回答