Для рекурсивного метода вы можете просто проверить указанный индекс c в том виде, в котором он у вас есть. Если мы удаляем текущий элемент, мы хотим остаться с тем же индексом, в противном случае мы хотим увеличить индекс на единицу. Базовый случай для этого - если мы смотрим на последний элемент в массиве или за его пределами, поскольку нам не нужно его проверять.
def shorter(lst, ind=0):
if ind >= len(lst)-1: #Base Case
return lst
if lst[ind] in lst[ind+1:]:
lst.pop(ind)
return shorter(lst,ind)
return shorter(lst, ind+1)
#Stuff to test the function
import random
x = [random.randint(1,10) for i in range(20)]
print(x)
x = shorter(x)
print(x)
Другой способ решить эту проблему в одной строке - это преобразовать список в набор, а затем обратно в список. Наборы имеют только уникальные значения, поэтому мы можем использовать это свойство для удаления любых повторяющихся элементов.
import random
x = [random.randint(1,10) for i in range(20)]
print(x)
x = list(set(x)) #Converts to set and back to list
print(x)