我有一个像这样的2D数组:
map = [[0, 1, 1], [0, 2, 1], [0, 2, 2]]
我想基于值获取索引数组。对于example map[0][0] == 0
,我希望该对(0,0)在结果数组的索引0上。结果数组应如下所示:
result[0] = [(0, 0), (1, 0), (2, 0)]
result[1] = [(0, 1), (0, 2), (1, 2)]
result[2] = [(1, 1), (2, 1), (2, 2)]
我一直在努力获得这样的结果而没有编写出非常糟糕的代码:
val0 = []
val1 = []
val2 = []
for i in range(3):
for j in range(3):
if(map[i][j] == 0) : val0.append((i, j))
if(map[i][j] == 1) : val1.append((i, j))
if(map[i][j] == 2) : val2.append((i, j))
data = []
data.append(val0)
data.append(val1)
data.append(val2)
答案 0 :(得分:4)
遍历矩阵并保存在字典中可以看到每个值的位置。那是你的结果。
retval = defaultdict(list)
for i in range(len(map)):
for j in range(len(map[i])):
val = map[i][j]
retval[val].append((i,j))
print retval
答案 1 :(得分:1)
您可以使用一些numpy
方法:
import numpy as np
map = [[0, 1, 1], [0, 2, 1], [0, 2, 2]]
npmap = np.array(map)
[list(zip(*np.where(npmap==x))) for x in range(np.max(npmap)+1)]
#[[(0, 0), (1, 0), (2, 0)], [(0, 1), (0, 2), (1, 2)], [(1, 1), (2, 1), (2, 2)]]