2016-03-04 122 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)]]]