Отвечу на вопрос, а то все предложили свои варианты, но никто не ответил почему программа не работает. В свое время я тоже написал решение в стиле ТСа, но, естественно, она работала почему-то неправильно. Причина в следующем: если мы перебираем элементы и удаляем какой-либо, то сам элемент удалится, произойдет смещение всех элементов влево (в результате чего их индексы уменьшатся на 1) и при этом итерируемый индекс еще и увеличится на 1 (!). Т.е. каждый раз, когда удаляется уникальный элемент, будет рассматриваться не следующий за ним элемент, а через него. Такие дела.
P.S. Могу посоветовать производить перебор элементов списка через их индексы из range(len(data)), и после каждого удаления уникального элемента производить корректировку индекса i = i - 1 (но это будет не питоновский стиль ;) )