为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2023-03-22 17:12:00
我创建了一个函数,它看起来像是一个矩阵,但是当打印出来时,它没有打印出矩阵中项目的正确位置。然而,用于显示当前所在行和列的打印功能确实打印了正确的值,但附加的这些值却没有。而不是打印:[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 = 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(curRow)    printMatrix()def printMatrix():    for item in range(len(matrix)):        print(matrix[item])makeMatrix(rows, cols)
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您将覆盖您的curRow3 次,然后最后一个值将是该变量的值。如果你不想要这种行为,你需要像这样克隆你的列表:


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(list.copy(curRow)) #Make a clone


    printMatrix()



def printMatrix():

    for item in range(len(matrix)):

        print(matrix[item])



makeMatrix(rows, cols)


查看完整回答
反对 回复 2023-03-22
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

由于嵌套 for ,您正在覆盖行。这就是为什么总是采用最新的数字。你可以这样解决这个问题:


rows = 3

cols = 3


matrix = []


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 风格为您的函数提供了更好的命名。


查看完整回答
反对 回复 2023-03-22
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

如果您将行替换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:  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']


查看完整回答
反对 回复 2023-03-22
  • 3 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信