嗨,所以我有一个函数,它接受 4 个参数,第一个参数是一个矩阵的嵌套列表,第二个参数是起点 ex: [1,0],第三个参数是停止点 ex[2,0] 和最后一个参数更改起始点和停止点之间的嵌套列表值,例如:-1。因此,它会根据示例中的增量将 [1,0] 更改为 [2,0] -1 因此,从 [1,0]:[2:0] 所有数字减去 1
所以现在我创建了嵌套列表的新停止点和新起点,并且我正在尝试使其循环仅经过起点和停止点并更改其间的任何数字。比如 update_elevation(THREE_BY_THREE, [1, 0], [1, 1], -2) 到 [[1, 2, 1], [2, 4, 5], [7, 8, 9]] 这样的坚持将增量添加到新列表
示例
>>> THREE_BY_THREE_COPY = [[1, 2, 1],[4, 6, 5],[7, 8, 9]]
>>> update_elevation(THREE_BY_THREE_COPY, [1, 0], [1, 1], -2)
>>> THREE_BY_THREE_COPY
[[1, 2, 1], [2, 4, 5], [7, 8, 9]]
def update_elevation(elevation_map, start, stop, delta) -> None:
new_start = elevation_map[start[0]][start[1]]
new_stop = elevation_map[stop[0]][stop[1]]
for num in range(new_start, new_stop):
num += delta
最佳答案
对于数字内容,numpy
通常是最佳选择。我们可以使用数组轻松地在开始和停止之间建立索引,从而大大简化代码:)
import numpy as np
def update_elevation(elevation_map, start, stop, delta):
elevation_map = np.array(elevation_map)
elevation_map[start[0]:stop[0] + 1, start[1]:stop[1] + 1] += delta
return elevation_map
THREE_BY_THREE_COPY = [[1, 2, 1],
[4, 6, 5],
[7, 8, 9]]
print(update_elevation(THREE_BY_THREE_COPY, [1, 0], [1, 1], -2))
我建议尝试不要使用列表的列表来解决此类问题,因为数组通常更容易使用。
编辑 没有 numpy 的解决方案:
def update_elevation(elevation_map, start, stop, delta):
for xval in range(start[0], stop[0] + 1):
for yval in range(start[1], stop[1] + 1):
elevation_map[xval][yval] += delta
return elevation_map
关于python - 改变列表的列表,如矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58700423/