如何在不使用 for 循环的情况下仅更新二维列表中的选定值?

How to update only selected values in a 2 dimensional list without using for loop?

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

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

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。

您需要涵盖列表中索引 不是 的情况,并保留这些值:

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

这个解决方案有效。