【问题标题】:How to alter a part of an array如何改变数组的一部分
【发布时间】:2015-12-04 10:07:20
【问题描述】:

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

现在我想将一些元素设置为 0。当然,我可以遍历表格并选择我想要更改的元素,但是当我想更改 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?

【问题讨论】:

  • 仅供参考,python 中没有数组。你在谈论列表。
  • @Lafexlos,谢谢。但这真的没关系。当我将列表的一部分设置为0时它仍然不起作用。

标签: python arrays assign


【解决方案1】:

您有 100x100 的列表, 通过这一行

table[left+1:left+3]

您从 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)]

【讨论】:

  • 谢谢,这是合乎逻辑的:)
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 2019-07-29
  • 2017-05-24
  • 2022-01-08
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多