如何改变数组的一部分
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)]
我有一个数组: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)]