我有一个数组: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?
答案 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)]