2016-03-04 124 views
2

索引仅在多维数组中重复。多维数组中的索引重复

a = [[279, 629, 590], [382, 825, 279], [629, 569, 113], [382, 785, 296]] 

与重复3D阵列,我想返回重复的行和列。

results = [[[279], [[0, 0], [1, 3]], [[629], [[0, 1], [2, 0]], [[382], [[1, 0], [3, 0]]] 

我期待着只返回重复的元素以及行和列。

+4

这是一个有趣的问题;你怎么试图解决它? –

+0

是否使用Numpy选项?这会让事情变得更容易。 (从技术上讲,Python核心语言中没有数组,更不用说多维数组了,有列表的列表,但这是不同的,在某些情况下差别很大)。 –

+0

我真的不知道在哪里从解决这个问题开始。我喜欢试图解决这个问题。 – QuantumTraveler

回答

1

一个针对此问题可能的解决方案是让一个dict(我用的是defaultdict因为如果一个人并不需要启动手工空列表更好),其中的关键是值和值的列表此值的坐标:

a = [[279, 629, 590], [382, 825, 279], [629, 569, 113], [382, 785, 296]] 
from collections import defaultdict 
elements = defaultdict(list) 
for row_index in range(len(a)): 
    for col_index in range(len(a[row_index])): 
     elements[a[row_index][col_index]].append([row_index, col_index]) 

下一步将是创造价值的list和你一样的坐标指定:

multiples = [[[i], elements[i]] for i in elements if len(elements[i]) > 1] 

具体做法是:

[[[629], [(0, 1), (2, 0)]], 
[[279], [(0, 0), (1, 2)]], 
[[382], [(1, 0), (3, 0)]]]