Общее решение для итераций Python (не относится к numpy или массивам), которое работает за линейное среднее время (O (n + m), n - это число подмассивов, а m - количество уникальных подмассивов):
a = [[0, 1, 2], [3, 4, 5]]
b = [[3, 4, 5], [6, 7, 8]]
from collections import defaultdict
indexmap = defaultdict(list)
for row, sublist in enumerate((a, b)):
for column, item in enumerate(sublist):
indexmap[tuple(item)].append((row, column))
repeats = dict((key, value) for key, value in indexmap.iteritems() if len(value) > 1)
Придает
{(3, 4, 5): [(0, 1), (1, 0)]}
Если вам не нужны двухрядные индексы (индекс в списке и в сохраненном индексе), вы можете упростить цикл до
for row in (a, b):
for column, item in enumerate(sublist):
indexmap[tuple(item)].append(column)
, поскольку a
будет обработано до b
, любые дубликаты будут автоматически пронумерованы по строкам:
{(3, 4, 5): [1, 0]}
С repeats[key][rownum]
, возвращающим индекс столбца для этой строки.