Рассмотрим numpy, чтобы решить эту проблему:
import numpy as np
y = [
[1, 2, 3],
[1, 2, 3],
[3, 4, 5],
[6, 5, 4],
[4, 2, 5],
[4, 2, 5],
[1, 2, 8],
[1, 2, 3]
]
# Returns unique values of array, indices of that
# array, and the indices that would rebuild the original array
unique, indices, inverse = np.unique(y, axis=0, return_index=True, return_inverse=True)
Вот распечатка каждой переменной:
unique = [
[1 2 3]
[1 2 8]
[3 4 5]
[4 2 5]
[6 5 4]]
indices = [0 6 2 4 3]
inverse = [0 0 2 4 3 3 1 0]
Если мы посмотрим на наша переменная - обратная , мы можем видеть, что мы действительно получаем [0, 1, 7] в качестве позиций индекса для нашего первого уникального элемента [1,2,3], все Теперь нам нужно сгруппировать их соответствующим образом.
new_list = []
for i in np.argsort(indices):
new_list.append(np.where(inverse == i)[0].tolist())
Вывод:
new_list = [[0, 1, 7], [2], [3], [4, 5], [6]]
Наконец, ссылки на приведенный выше код:
Numpy - уникальный , где , argsort