【发布时间】:2022-01-01 06:44:48
【问题描述】:
我想找到二维数组的索引并将其设为数组。 例如:
data_pre=[[1,1,1,0,0,0],[1,0,1,0,0,0],[1,0,0,0,1,0],[1,0,0,0,0,0]]
我想找到一个索引,并希望它变成这样
b=[[0,1,2],[0,2],[0,4],[0]]
代码:
result = []
for i in range(len(data_pre)):
arr=data_pre[i]
currentArrResult=[]
for j in range(len(arr)):
if arr[j]==1:
currentArrResult.append(j)
result.append(currentArrResult)
我试过这样但输出错误。
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 2], [0, 2], [0, 4], [0, 4], [0]]
我不知道哪一部分错了……
【问题讨论】:
-
您应该减少最后一行的缩进,使其与最里面的 for 循环处于同一级别。现在,您正在为每个
i和j执行result.append(currentArrResult)。我想您的意思是为每个i执行一次。 -
顺便说一下,您可以更简洁地将其表达为列表理解:
[[i for i, b in enumerate(row) if b] for row in data_pre]。 -
这种模式:
for i in range(len(data_pre))是不必要的迂回。我们可以直接用for arr in data_pre迭代data_pre。如果需要索引,我们可以使用enumerate:for i, arr in enumerate(data_pre)。 -
使用
numpy:[np.where(np.any(x==15, axis=1)) for x in data_pre]。见stackoverflow.com/questions/16094563/…