Python 列表和列表

Python 列表和列表,python,list,loops,if-statement,matrix,Python,List,Loops,If Statement,Matrix,采取下列措施: 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

采取下列措施:

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()
[zip中i的列表(map(sum,zip(*i))(matrix1,matrix2)]
输出

[[2, 2], [4, 6]]
[zip中i的列表(map(sum,zip(*i))(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]]
可以使用和使用嵌套列表理解。例如:

>>> 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]]

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

可以处理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(r1, r2)] for r1, r2 in zip(matrix1, matrix2)]

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

可以处理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(r1, r2)] for r1, r2 in zip(matrix1, matrix2)]

您需要两个嵌套循环,因为您的数据嵌套在两个级别中。您需要两个嵌套循环,因为您的数据嵌套在两个级别中。在问题的示例中,一个只考虑两个列表。如果有两个以上呢?您只需将附加列表作为附加参数传递给
zip
函数,如
zip(m1,m2,m3,m4,m5,…)
。否则,您还可以将列表存储到其他列表中,如:
my_list=[m1,m2,m3,m4]
,并通过
*
传递到zip,作为:
zip(*my_list)
@GonçaloPeres龚燿禄 您应该能够提供所需数量的参数
zip
zip(matrix1,matrix2,matrix3,…)
。但另一个问题可能是,如果列表嵌套超过2个,会发生什么?或者只是简单的列表?是否有可能将此解决方案推广到这些情况?@Asocia您必须编写一个递归函数才能实现这一点。不可能理解列表,也不可能只是为了循环。在问题中的示例中,我们只考虑两个列表。如果有两个以上呢?您只需将附加列表作为附加参数传递给
zip
函数,如
zip(m1,m2,m3,m4,m5,…)
。否则,您还可以将列表存储到其他列表中,如:
my_list=[m1,m2,m3,m4]
,并通过
*
传递到zip,作为:
zip(*my_list)
@GonçaloPeres龚燿禄 您应该能够提供所需数量的参数
zip
zip(matrix1,matrix2,matrix3,…)
。但另一个问题可能是,如果列表嵌套超过2个,会发生什么?或者只是简单的列表?是否有可能将此解决方案推广到这些情况?@Asocia您必须编写一个递归函数才能实现这一点。不可能理解列表或仅用于loops@Epsi95超级的elegant@Epsi95超级……优雅