I have a list that contains duplicate elements. For all duplicate elements, I would like to obtain a list of their indices. The final output should be a list of lists of duplicate indices.
I have already come up with a working solution, but I have the feeling, that there might be a more computationally efficient and/or sparse way (using less code) for this problem:
# set up a list that contains duplicate elements
a = ['bar','foo','bar','foo','foobar','barfoo']
# get list of elements that appear more than one time in the list
seen = {}
dupes = []
for x in a:
    if x not in seen:
        seen[x] = 1
    else:
        if seen[x] == 1:
            dupes.append(x)
        seen[x] += 1
# for each of those elements, return list of indices of matching elements
# in original list
dupes_indices = []
for dupe in dupes:
    indices = [i for i, x in enumerate(a) if x == dupe]
    dupes_indices.append(indices)
where dupes_indices is [[0, 2], [1, 3]] ('foo' appears at indices 0 and 2 and 'bar' appears at indices 1 and 3)
I used the code from this and from this answer on stackoverflow.
 
     
    