如何改变数组的一部分

How to alter a part of an array

我有一个数组:table = [[ 1 for x in range(1, 101)] for x in range(1, 101)]

现在我想将一些元素设置为0。当然,我可以遍历table并选择我想要改变的元素,但是当我想要改变时它没有多大意义10000 个元素中有 25 个元素。这是我的代码:

left = randint(1,100)
table[left+1:left+3][left+1:left+3] = [[ 0 for x in range(1,3)] for x in range(1, 3)]

但是,当我对数组的所有单元格求和时:

sum(map(sum, table))

我得到 10 000。

这个分配有什么问题,正确的做法是什么?

我在 Windows 上使用 Python 2.7 和 PyCharm。

为什么会出现以下行:

print len(table[left-1:left+6][upper-1:upper+6])

打印出 0?

您有 100x100 的列表, 通过这条线

table[left+1:left+3]

您 select 从 left+1 到 left+3 列出,因此结果将是列表 2x100。 因此,如果您的变量 left 大于 1,此行将尝试获取超出范围的列表:

table[left+1:left+3][left+1:left+3]

结果可能是:

[]

示例:

table = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    [13, 14, 15, 16]
]

所以结果:

table[2:4]

[[9, 10, 11, 12], [13, 14, 15, 16]]

如果您尝试从该列表中获取范围 [2:4],您将一无所获,因为它仅包含 2 个列表:

[]

/编辑:从不支持代码格式的评论中移出:

回复标题问题。我认为很好的解决方案是:

for row in table[left:left+5]:
    row[right:right+5] = [0 for x in range(5)]