O problema está na linha abaixo:
lista.remove(i)
Quando você pede para remover o i está removendo um valor, que por coincidência, tem o mesmo valor do índice e não o valor em si. Traduzindo, quando vc coloca lista.remove(i) quando esse índice é igual a 3 você estará removendo o valor 3 (incorreto) e não o valor 6 (correto). Por isso, para acessar o valor a ser removido você precisa colocar lista[i] como parâmetro da função remove.
Segue o código (corrigido) que usei para fazer o teste no Spyder:
def rem(lista):
"""
Parameters
----------
lista : LIST
Recebe uma lista de valores inteiros.
Returns
-------
resultado : LIST
Retorna uma lista de valores inteiros não repetidos.
"""
def rem(lista):
i = 0
resultado = []
while i < len(lista):
if lista[i] not in resultado:
resultado.append(lista[i])
i = i + 1
return sorted(resultado)
Usei essas listas de teste:
lista = [1,2,3,4,6,5,4,6,7,8,5,5,3,0,0]
print(rem(lista))
lista = [4,4]
print(rem(lista))
lista = [1,1,1,2,3,4,6,5,4,7,8,6,5,5,3]
print(rem(lista))
lista = [1,2,3,4,6,5,4,4,4,7,8,6,5,5,3]
print(rem(lista))
lista = [1,2,3,4,6,5,7,8]
print(rem(lista))
Respostas:
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[4]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
PS: Precisei fazer uma correção. Ele estava removendo os itens conforme descrito da primeira vez, mas se perdia em alguns exemplos. Coloquei algumas listas para teste também.