【问题标题】:Find index in a case of 2D array在二维数组的情况下查找索引
【发布时间】: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 循环处于同一级别。现在,您正在为每个ij 执行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/…

标签: python arrays list


【解决方案1】:

您不应该在内循环内收集输出。可能会得到这样的结果:

[[0],[0, 1],[0, 1, 2],
[0],[0, 2],
[0],[0, 4],
[0]]

您可以在追加完成后打印currentArrResult 来检查。
但是由于数据参考,您得到了不同的结果。

您应该在内循环完成工作后收集结果。
喜欢:

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)
           #print(currentArrResult)
    result.append(currentArrResult)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2019-07-05
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多