a, seen, result = [1, 2, 3, 2, 1, 5, 6, 5, 5, 5], set(), []
for idx, item in enumerate(a):
if item not in seen:
seen.add(item) # First time seeing the element
else:
result.append(idx) # Already seen, add the index to the result
print result
# [3, 4, 7, 8, 9]
Edit: You can just use list comprehension in that function, like this
def list_duplicates(seq):
seen = set()
seen_add = seen.add
return [idx for idx,item in enumerate(seq) if item in seen or seen_add(item)]
print list_duplicates([1, 2, 3, 2, 1, 5, 6, 5, 5, 5])
# [3, 4, 7, 8, 9]