【问题标题】:Python NxN matrix is not setting None values correctly [duplicate]Python NxN矩阵未正确设置无值[重复]
【发布时间】:2020-02-16 21:06:33
【问题描述】:

我在 Python 3 中有以下代码:

def matrix(n:int) -> list:
    matrix = list([[None]*n]*n)

    count = 1
    for i in range(n):
        for j in range(n):
            print(i, j, count)
            matrix[i][j] = count
            count += 1

    return matrix

number = 3
print(matrix(number))

下面是print 结果:

    0 0 1
    0 1 2
    0 2 3
    1 0 4
    1 1 5
    1 2 6
    2 0 7
    2 1 8
    2 2 9
    [[7, 8, 9], [7, 8, 9], [7, 8, 9]]

如您所见,索引是正确的,但它没有返回[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 的预期值。这种行为肯定是有根本原因的,当然,通过使用其他方法,例如append(),结果是正确的。

【问题讨论】:

  • matrix = [[None]*n for i in range(n)] 这为您提供了单独的 3 个列表,它们共同构成了主列表。
  • 嗨,我添加了回答的单行函数,检查我的更新:)

标签: python arrays python-3.x list matrix


【解决方案1】:

matrix = list([[None]*n]*n) 会产生一些问题,您可以在here 中了解更多信息

我会这样做:

def matrix(n:int) -> list:
     matrix = []
     count = 1
     for i in range(n):
         matrix.append([])
         for j in range(n):
             matrix[i].append(count)
             count+=1

     return matrix

number = 3
print(matrix(number))

为了避免可变对象的问题

更新

如果你想要单线:

def g(n):
     return [list(range(i+i+1, i+n+i+1)) for i in range(0,n*2, 2)]

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2019-12-22
    • 2016-11-14
    • 1970-01-01
    • 2017-03-15
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多