【问题标题】:How to update only selected values in a 2 dimensional list without using for loop?如何在不使用 for 循环的情况下仅更新二维列表中的选定值?
【发布时间】:2020-12-28 13:44:09
【问题描述】:

我有一个巨大的矩阵,大约有 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。

【问题讨论】:

    标签: python list loops matrix list-comprehension


    【解决方案1】:
    matrix[1] = [matrix[1][i] + 1 if i in index_list else matrix[1][i] for i in range(len(matrix[1]))]
    

    这个解决方案奏效了。

    【讨论】:

    • @Ramasamy Kandasamy 此解决方案是通过对 Ramasamy Kandasamy 建议的答案进行小的更改得出的
    【解决方案2】:

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

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

    【讨论】:

    • 我猜是matrix[1] = [matrix[1][index] + 1 if index in index_list else matrix[1][index] for i in range(len(matrix[1]))]
    • 我尝试了您的建议,但它不起作用。它给出了与我得到的相同的输出,我在上面提到过。在这里,问题是您使用了 else matrix[1][index] 但您所指的这个“索引”不在 index_list 中。 Index_list 只包含那些需要更新的索引。
    • @RamasamyKandasamy 您的建议适用于以下一些更改:matrix[1] = [matrix[1][i] + 1 if i in index_list else matrix[1][i] for i in range(len(matrix[1]))] 谢谢
    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2011-11-02
    • 2015-04-24
    相关资源
    最近更新 更多