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超级……优雅