Несколько ответов довольно близки к этому, но не совсем так, как я это сделал:
def uniques( your_string ):
seen = set()
return ' '.join( seen.add(i) or i for i in your_string.split() if i not in seen )
Конечно, если вы хотите, чтобы он был чуть чище или быстрее, мы можем немного изменить рефакторинг:
def uniques( your_string ):
words = your_string.split()
seen = set()
seen_add = seen.add
def add(x):
seen_add(x)
return x
return ' '.join( add(i) for i in words if i not in seen )
Я думаю, что вторая версия примерно настолько же эффективна, насколько вы можете получить небольшой объем кода.(Можно использовать больше кода для выполнения всей работы за одно сканирование всей входной строки, но для большинства рабочих нагрузок этого должно быть достаточно.)