有人可以说这段代码出了什么问题吗?

时间:2018-03-08 01:31:28

标签: python arrays arraylist

我正在处理一个问题,它将nums,row,column作为参数,并返回一个大小为row x column的结果矩阵。

def matrixReshape(self, nums, r, c):
    """
    :type nums: List[List[int]]
    :type r: int
    :type c: int
    :rtype: List[List[int]]
    """
    count = 0
    i = j = 0
    m = [[0]*c]*r
    for row in nums:
        for val in row:
            if j < c and i < r:
                print(val,m[i][j], i, j)
                m[i][j] = val
                print(val,m[i][j], i, j)
                count += 1
                j += 1
                if j == c:
                    i += 1
                    j = 0  
    if count == (r*c):
        return m
    else:
        return nums

当我测试输入如([[1,2],[3,4]],4,1)时,它生成输出[[4],[4],[4],[4]]而不是[[1],[2],[3],[4]]

2 个答案:

答案 0 :(得分:0)

[0]*4为您提供了相同对象的四个副本,而不是四个独立列表。

尝试

m = [[0 for i in range(c)] for j in range(r)]

答案 1 :(得分:0)

m = [[0]*c]*r

这将创建对同一内部列表的r引用列表。因此,无论何时修改m[0],您还要修改m[1],依此类推,因为它们是相同的列表。

你可能想要这样的东西:

m = [[0 for _ in range(c)] for _ in range(r)]