Вы можете использовать collections.defaultdict
для однопроходного решения.Затем используйте sorted
, если вам нужно, как и в желаемом результате, отсортировать ваши индексы по значению.
original_list = [1,2,1,4,4,4,3,4,4,1,4,3,3]
from collections import defaultdict
from operator import itemgetter
dd = defaultdict(list)
for idx, value in enumerate(original_list):
dd[value].append(idx)
keys, values = zip(*sorted(dd.items(), key=itemgetter(0)))
print(keys, values, sep='\n')
(1, 2, 3, 4)
([0, 2, 9], [1], [6, 11, 12], [3, 4, 5, 7, 8, 10])
Для сравнения, значения dd
- это вставка , упорядоченная вPython 3.6+ (официально в 3.7+, как подробности реализации CPython в 3.6):
print(list(dd.values()))
[[0, 2, 9], [1], [3, 4, 5, 7, 8, 10], [6, 11, 12]]