Class中的Python数组构造

时间:2017-04-05 09:05:06

标签: python list class matrix

我的班级已经完成了加法和减法。但是当我尝试进行乘法运算时,我有了不必要的外部数组。

class Matrix:
    def __init__(self,*args):
        self.m = []
        self.m.extend(args)

m1 = Matrix([1,2],[3,4])

有效。但是对于乘法

empty = Matrix([[0 for row in range(col_matrix)] for col in range(row_self)])

我得[[[0, 0], [0, 0]]]而不是[[0, 0], [0, 0]]。我该怎么办?

1 个答案:

答案 0 :(得分:1)

因为extend本身:但是因为您使用*args(带星号*)。的确如果你打电话:

Matrix([[0,0],[0,0]])

args是元组([[0,0],[0,0]],) (包含一个元素)会发生什么。所以你扩展元组,从而append元组的单个元素:你 append([[0,0],[0,0]])

你可能想要的是逐一扩展 args的所有元素,所以:

class Matrix:
    def __init__(self,*args):
        self.m = []
        for argi in args:
            self.m.extend(argi)

如果您想只接受一个参数,您可以将流程简化为:

class Matrix:
    def __init__(self,data): # without asterisk
        self.m = []
        self.m.extend(data)

或者让它更优雅,例如:

class Matrix:
    def __init__(self,data):
        self.m = list(data)

请注意,您制作浅色副本:您最好制作深层副本,因为否则行仍然相同,因此对一个矩阵中的行进行修改将反思另一个矩阵。所以:

from copy import deepcopy

class Matrix:
    def __init__(self,data):
        self.m = deepcopy(data)