Как я могу удалить повторяющиеся слова в строке с Python? - PullRequest
19 голосов
/ 17 октября 2011

Следующий пример:

string1 = "calvin klein design dress calvin klein"

Как удалить вторые два дубликата "calvin" и "klein"?

Результат должен выглядеть как

string2 = "calvin klein design dress"

должны быть удалены только вторые дубликаты, а последовательность слов не должна изменяться!

Ответы [ 12 ]

0 голосов
/ 17 апреля 2016

11 и 2 работают отлично:

    s="the sky is blue very blue"
    s=s.lower()
    slist = s.split()
    print " ".join(sorted(set(slist), key=slist.index))

и 2

    s="the sky is blue very blue"
    s=s.lower()
    slist = s.split()
    print " ".join(sorted(set(slist), key=slist.index))
0 голосов
/ 18 октября 2011

Несколько ответов довольно близки к этому, но не совсем так, как я это сделал:

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 )

Я думаю, что вторая версия примерно настолько же эффективна, насколько вы можете получить небольшой объем кода.(Можно использовать больше кода для выполнения всей работы за одно сканирование всей входной строки, но для большинства рабочих нагрузок этого должно быть достаточно.)

...