如何在Python中创建包含不同变量的列表(矩阵)?

时间:2015-02-28 19:01:50

标签: python python-3.x

我目前正在使用Python语言,我正在尝试创建一个类,该类充当包含4个并行列表的矩阵,其长度等于给定句子的长度。每个列表都有自己的行,并包含不同的变量。然而,我试图将句子的每个单独的字母打印成第2行时遇到麻烦。我将如何通过迭代(而不是手动附加它们)来实现这一点?

出于视觉目的,最终结果需要如下所示:

Row 1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Row 2 = [h, e, l, l, o,  , w, o, r, l, d]
Row 3 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Row 4 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

以下是我目前的代码。

class Matrix(object):#,Sentence, Cipher_Sentence
    def __init__ (self, cols, rows):#, Nav):#, Guess, Crypt, Sent):
        self.cols=cols
        self.rows=rows
        self.sentence=sentence
        self.matrix=[]
        for i in range (rows):
            ea_row=[]
            for j in range (cols):
                ea_row.append(0)
            self.matrix.append(ea_row)

    def set_Nav(self, col, row, Nav):
        self.matrix[col-1][0]=Nav
    def get_Nav(self, col, row):
        return self.matrix[col-1][0]

    def set_Guess(self, col, row, Guess):
        self.matrix[col-1][1]=Guess
    def get_Guess(self, col, row):
        return self.matrix[col-1][1]

    def set_Crypt(self, col, row, Crypt):
        self.matrix[col-1][2]=Crypt
    def get_Crypt(self, col, row):
        return self.matrix[col-1][2]

    def set_Sent(self, col, row, Sent):
        self.matrix[col-1][3]=Sent
    def get_Sent(self, col, row):
        return self.matrix[col-1][3]

    def __repr__(self):
        rowname= ""
        for i in range(self.rows):
            rowname += 'Row %s = %s\n' %(i+1, self.matrix[i])

        return rowname
sentence="hello world"
m=Matrix(len(sentence),4)
print(m)

提前致谢

1 个答案:

答案 0 :(得分:1)

好的,我不完全理解你的问题,但我认为你所得到的要点就是你想要一次性设置整行,而不是写信信。

假设您希望set_Guess要执行的操作是将row - 行设置为Guess,那么您可以将其更改为以下内容:

def set_Guess(self, row, Guess):
    self.matrix[row][:] = Guess
def get_Guess(self, row):
    return self.matrix[row][:]

所以,基本上:

def set_Guess(matrix, row, Guess):
    matrix[row][:] = Guess
    return matrix

def get_Guess(matrix, row):
    return matrix[row][:]

sentence = "hello world"
rows = 4
cols = len(sentence)
matrix = [['0'] * cols for row in range(rows)]

set_Guess(matrix, 1, "hello world")

for rn, row in enumerate(matrix):
    print('Row {rnum:d} = [{rvals}]'.format(rnum=rn+1, rvals=', '.join(row)))

这会返回您要查找的内容:

> python testmatrix.py
Row 1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Row 2 = [h, e, l, l, o,  , w, o, r, l, d]
Row 3 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Row 4 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

那就是说,我怀疑对于你的特定应用,你并没有以正确的方式做事。我建议您可以将您的申请转到Code Review以获得更多设计方面的帮助。