自己制作的矩阵函数打印错误的项目位置

我创建了一个函数,它看起来像是一个矩阵,但是当打印出来时,它没有打印出矩阵中项目的正确位置。然而,用于显示当前所在行和列的打印功能确实打印了正确的值,但附加的这些值却没有。


而不是打印:


[00, 01, 02]

[10, 11, 12]

[20, 21, 22]

它打印:


[20, 21, 22]

[20, 21, 22]

[20, 21, 22]

我设法意识到它实际打印的是:


[x0, x1, x2]

[x0, x1, x2]

[x0, x1, x2]

其中 (x = rows - 1) 而不是它应该的当前行。


我制作矩阵的脚本是:


rows = 3

cols = 3


matrix = []



def makeMatrix(rows, cols):

    curRow = []


    for row in range(rows):

        curRow.clear()

        print("Row: ", row)


        for col in range(cols):

            print("Col: ", col)

            toAppend = str(row) + str(col)

            curRow.append(toAppend)


        matrix.append(curRow)


    printMatrix()



def printMatrix():

    for item in range(len(matrix)):

        print(matrix[item])



makeMatrix(rows, cols)


哔哔one
浏览 134回答 3
3回答

猛跑小猪

您将覆盖您的curRow3 次,然后最后一个值将是该变量的值。如果你不想要这种行为,你需要像这样克隆你的列表:rows = 3cols = 3matrix = []def makeMatrix(rows, cols):    curRow = []    for row in range(rows):        curRow.clear()        print("Row: ", row)        for col in range(cols):            print("Col: ", col)            toAppend = str(row) + str(col)            curRow.append(toAppend)        matrix.append(list.copy(curRow)) #Make a clone    printMatrix()def printMatrix():    for item in range(len(matrix)):        print(matrix[item])makeMatrix(rows, cols)

繁星淼淼

由于嵌套 for ,您正在覆盖行。这就是为什么总是采用最新的数字。你可以这样解决这个问题:rows = 3cols = 3matrix = []def make_matrix(rows, cols):    for row in range(rows):        curRow = []        print("Row: ", row)        for col in range(cols):            print("Col: ", col)            toAppend = str(row) + str(col)            curRow.append(toAppend)        matrix.append(curRow)    print_matrix()def print_matrix():    for item in range(len(matrix)):        print(matrix[item])make_matrix(rows, cols)我希望这有帮助。此外,我按照 PEP8 风格为您的函数提供了更好的命名。

陪伴而非守候

如果您将行替换curRow.clear()为curRow = []您将获得所需的输出,如下所示:>>> ('Row: ', 0)('Col: ', 0)('Col: ', 1)('Col: ', 2)('Row: ', 1)('Col: ', 0)('Col: ', 1)('Col: ', 2)('Row: ', 2)('Col: ', 0)('Col: ', 1)('Col: ', 2)['00', '01', '02']['10', '11', '12']['20', '21', '22']这是在.下测试的Python 2.7。Python 3.5在我得到相同结果的情况下实际测试您的原始代码:In [21]: makeMatrix(rows, cols)Row:  0Col:  0Col:  1Col:  2Row:  1Col:  0Col:  1Col:  2Row:  2Col:  0Col:  1Col:  2['00', '01', '02']['10', '11', '12']['20', '21', '22']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python