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

问题描述

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

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

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

在实际问题中,我需要更新所有行,但是为了简单起见,在这里我只考虑1行。即第二行我希望更新第二行的第一和第二值,并将其余值保留在第二行中。 我需要不使用for循环来做。 我尝试的代码如下:

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

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

[[1,[5,9]]

我需要/期望的输出是:

[[1,6,9]]

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

解决方法

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

此解决方案有效。

,

您需要处理列表中索引为 not 的情况,并保留这些值:

matrix[1] = [ matrix[1][index] + 1 if index in index_list
                                   else matrix[1][index] ]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...