列表和列表

2024-10-02 02:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

采取下列措施:

matrix1 = [[1, 1], [2, 3]]
matrix2 = [[1, 1], [2, 3]]

在不使用其他库(如pandas、numpy等)的情况下,如何返回各种列表的总和(在本例中为2),如下所示:

[[2, 2], [4, 6]]

有以下几点

def addMatrix(m1, m2):

    if len(m1) == len(m2):
        return [x[0] + x[1] for x in zip(m1, m2)]
    else:
        raise ValueError("Given matrices are not the same size.")

它回来了

>>> addMatrix(matrix1, matrix2)
[[1, 1, 1, 1], [2, 3, 2, 3]]

这不是一个人想要的,只适用于列表,而不是列表

我们也尝试了以下方法,但给出了与上面相同的输出

new = [] 

def add(m1, m2):
    for i, value in enumerate(m1):
        if len(m1) == len(m2):
            additional = m2[i]
            new.append(value + additional)
        else:
            raise ValueError("Given matrices are not the same size.")

人们知道如何使用numpy实现这一点,但不使用任何库的方法是我们想要的

以下是numpy的有效解决方案

import numpy as np

matrix1_np = np.asarray(matrix1)
matrix2_np = np.asarray(matrix2)
add = matrix1_np + matrix2_np
add.tolist()

Tags: innumpyadd列表forlenifdef
3条回答

我注意到在以前的回答中有一种模式。它们都使用^{}^{}

可以处理2个以上列表的备选方案如下

def addMatrix(*matrices):
    return [
        [sum(values) for values in zip(*rows)]
        for rows in zip(*matrices)
    ]

如果我们以下面的矩阵为例

matrix1 = [[1, 1], [2, 3]]
matrix2 = [[1, 1], [2, 3]]
matrix3 = [[1, 1], [2, 3]]

并打印结果

>>> print(addMatrix(matrix1, matrix2, matrix3))
[[3, 3], [6, 9]]

^{}实际上,可以方便地同时循环两个列表。这里有一种只使用^{}的方法

def addMatrix(matrix1, matrix2):
    return [
        [n + m for n, m in zip(row1, row2)]
        for row1, row2 in zip(matrix1, matrix2)
    ]

或者,在一行中

def addMatrix(matrix1, matrix2):
    return [[n+m for n, m in zip(r1, r2)] for r1, r2 in zip(matrix1, matrix2)]
[list(map(sum, zip(*i))) for i in zip(matrix1, matrix2)]

输出

[[2, 2], [4, 6]]

可以使用^{}^{}使用嵌套的列表理解。例如:

>>> matrix1 = [[1, 2], [3, 4]]
>>> matrix2 = [[5, 6], [7, 8]]

>>> [[sum(y) for y in zip(*x)] for x in zip(matrix1, matrix2)]
[[6, 8], [10, 12]]

相关问题 更多 >

    热门问题