python - 试图通过索引解决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
解决方案
而不是立即更新矩阵,取 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]]
推荐阅读
- javascript - 通过 php 解析 Javascript src 以消除未使用的分支
- python - TypeError:“numpy.float32”对象不可调用
- cmd - Ubuntu在用户名有空格时更改默认用户
- dictionary - 如何实现地图缩减算法以在图中查找所有长度为 2 的路径
- google-apps-script - Google Apps 脚本 - 有条件地将数据从其他 Google 表格检索到概览表格
- r - 带 boxcox 的线性模型,用于带零的数据框。无法预测所需的值
- python - KeyError 排序数据框 - 无法识别列名/索引
- vb.net - 如何使用鼠标滚轮将 ListView 滚动一行而不是默认的三行?
- python - 没有文件 IO 的多进程和多进程:OSError:[Errno 24] 打开的文件太多
- amcharts - 在 amcharts 中展开和折叠条形图