首页 > 解决方案 > 试图通过索引解决python中的双列表增量

问题描述

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

                     0 0 0
                     0 0 0

你有一个索引

                     0   1
                     1   1

索引的左侧是您将哪一行的值加一,而右侧是您将哪一列的值加一。

好吧,您将 0 行加一,将 1 行加一,这样您就得到了

                   1  1  1 
                   1  1  1

然后您查看索引的 let 一侧,这意味着您将 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

标签: pythonarrays

解决方案


而不是立即更新矩阵,取 2 个列表用于行更改和列更改,初始化为零。

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

最初

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]]

推荐阅读