python - 改变列表的列表,如矩阵

标签 python arrays list

嗨,所以我有一个函数,它接受 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/

相关文章:

jquery - 带或不带缩略图的 css 和 html 列表或 div 位置

python - 为什么 django rest 框架返回无效的 JSON 响应?

python - 值错误: Length Not Known while mapping a list in Theano

arrays - 如何确保 knockout 可观察数组保持排序?

ios - 以编程方式快速制作二维数组

python - 使用 Pandas 中 DataFrame 单元格中存储的列表的值

python - 如何从 python 中的另一个列表中删除索引列表?

python - 有效地将 Pandas 数据框列的组合转换为键值对

python - 重新定义日志记录根记录器

c++ - std::string 与静态常量的 char 数组