试图通过索引解决python中的双列表增量问题

试图通过索引解决python中的双列表增量问题,python,arrays,Python,Arrays,我正在尝试解决这个问题。这是leet代码1252。 基本上你有一个矩阵和索引。 假设你有一个矩阵 0 0 0 0 0 0 你有一个索引 0 1 1 1 索引的左侧是哪些行值增加一,右侧是哪些列值增加一 那么,将0行乘以1,将1行乘以,得到 1 1 1

我正在尝试解决这个问题。这是leet代码1252。 基本上你有一个矩阵和索引。 假设你有一个矩阵

                     0 0 0
                     0 0 0
你有一个索引

                     0   1
                     1   1
索引的左侧是哪些行值增加一,右侧是哪些列值增加一

那么,将0行乘以1,将1行乘以,得到

                   1  1  1 
                   1  1  1
                      1  2  1
                      1  2  1

                      1   3    1
                      1   3    1
然后你看索引的左边,这意味着你把1列增加1,把1列增加1,得到

                   1  1  1 
                   1  1  1
                      1  2  1
                      1  2  1

                      1   3    1
                      1   3    1
我试图用下面的代码来解决这个问题

 def matrix(n,m,index):

      nums=[[0]*m]*n
      print(nums)
      a=len(nums)
      b=len(nums[0])
      for i in range(a):
         c=index[i][0]
         print("the value of c is ",c)

         for j in range(b):
            nums[c][j]=nums[c][j]+1
     print(nums)
     for j in range(a):
         c=index[1][j]
         print(c)
         for i in range(a):
            nums[i][c]=nums[i][c]+1
     print(nums)


 index=[[0,1],[1,1]]
 n=2
 m=3
matrix(n,m,index)
但我最终得到了

               2   6    2
              2    6    2
供我输入

                0    0    0
                0    0    0
奇怪的是,尝试相同的代码并得到正确的答案

               def inc(nums):
                    print(nums)
                    a=len(nums)
                    b=len(nums[0])

                   for i in range(a):
                     c=index[i][0]
                    for j in range(b):
                         nums[c][j]=nums[c][j]+1
             print(nums)

                 for j in range(a):
                      c=index[1][j]
                      print(c)
                   for i in range(a):
                       nums[i][c]=nums[i][c]+1
             print(nums)


         a=[[0,0,0],[0,0,0]]
         index=[[0,1],[1,1]]
           inc(a)
正确答案是

              1   3   1
              1   3   1

不要立即更新矩阵,而是为行更改和列更改创建两个列表,并用零初始化

遍历索引列表并更改行和列列表:

最初

r = [0,0] , c = [0,0,0]
index -> 0 1
r = [1,0] , c = [0,1,0]
index -> 1 1
r = [1,1] , c = [0,2,0]
然后,最后,用行列表中的相应值和列列表中的相应值递增每一行

这也是一个优化的解决方案

这是我的密码:

n = 2
m = 3

index = [[0,1],[1,1]]

mat = [[0 for i in range(m)] for j in range(n)]

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

for ri,ci in index:
    r[ri]+=1
    c[ci]+=1

for i in range(n):
    mat[i] = [r[i]]*m

for i in range(m):
    if c[i]>0:
        for j in range(n):
            mat[j][i] += c[i]

print(mat)
输出:

[[1, 3, 1],
[1, 3, 1]]

请修复代码和数据示例中不一致的缩进。第一个代码块定义了一个从未使用过的函数(
矩阵
)。好的,让我来修复它。我认为现在第一个代码块仍然定义了一个从未使用过的函数(
矩阵
)。