首页 > 解决方案 > 如何在不使用 for 循环的情况下仅更新二维列表中的选定值?

问题描述

我有一个巨大的矩阵,大约有 80000 行和 66000 列。我需要更新每一行中的选定值。这些选定的值因行而异。例如,我可能必须更新第一行的第 346、第 446、第 789 和第 321 列值,而对于第二行,我可能必须更新第 821、第 564、第 101、第 781 列值。我希望你了解情况。

在这里,我正在使用一个小矩阵来模拟这个问题。假设我有一个二维列表/矩阵。

matrix = [ [1,2,3], [4,5,6], [7,8,9]]

在实际问题中,我需要更新所有行,但为了简单起见,我只考虑 1 行。即第二行。我希望更新第 2 行的第 1 和第 2 值,并保持第 2 行中的其余值不变。我需要在不使用 for 循环的情况下做到这一点。我试过的代码如下:

index_list = [0,1]
matrix[1] = [ matrix[1][index] + 1 for index in index_list ]
print(matrix)

这里,index_list 是需要更新的选定列的列表。我得到的输出是:

[[1, 2, 3], [5, 6], [7, 8, 9]]

我需要/预期的输出是:

[[1, 2, 3], [5, 6, 6], [7, 8, 9]]

所以,问题是,我希望只更新上面给定矩阵的第二行的第一个和第二个值,并保持第二行中的其余值不变。由于时间限制,这需要在不使用 for 循环的情况下完成。我正在尝试使用列表压缩,因为它相对较快。你能帮忙吗?我忘了说代码是在python中的,如果需要我们可以使用pandas,numpy。

标签: pythonlistloopsmatrixlist-comprehension

解决方案


matrix[1] = [matrix[1][i] + 1 if i in index_list else matrix[1][i] for i in range(len(matrix[1]))]

这个解决方案奏效了。


推荐阅读