如何更改数组的一部分

时间:2015-12-04 10:07:21

标签: python arrays assign

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

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

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?

1 个答案:

答案 0 :(得分:2)

你有100x100的清单, 通过这一行

table[left+1:left+3]

您从左+ 1到左+ 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)]