2015-02-14 4 views
0

У меня есть строка в python и вы хотите удалить повторяющиеся строки (т. Е. Когда текст между \ n совпадает, а затем удалите второе (третье, четвертое) вхождение, но сохраните . порядок строки, напримерУдалить повторяющиеся строки из строки в python

line1 \n line2 \n line3 \n line2 \n line2 \n line 4 

вернется:

line1 \n line2 \n line3 \n line 4 

Другие примеры, которые я видел на StackOverflow сделки с на этапе чтения текстового файла в Python (например, с помощью Readline() , если вы уже в наборе прочитанных строк, а затем добавляете в строку только в том случае, если это является уникальным). в моем случае это не работает, так как строка, которую я имею, уже была сильно манипулирована с момента загрузки в python ... и кажется, что она очень неудачна, например. написать целую строку в текстовый файл, а затем прочитать в строке построчно ищет дублирующих линий

+0

что вы пробовали? Я не думаю, что это так сложно. Для начала просто разделите эту строку и в другом цикле начните добавлять уникальные значения. – karthikr

+0

Включите его в комплект – mchant

+0

[OrderedSet] (http://code.activestate.com/recipes/576694/)? – SuperSaiyan

ответ

4

Для Python 2.7+, это может быть сделано с однострочника:

from collections import OrderedDict 

test_string = "line1 \n line2 \n line3 \n line2 \n line2 \n line 4" 

"\n".join(list(OrderedDict.fromkeys(test_string.split("\n")))) 

Это дает мне: 'line1 \n line2 \n line3 \n line 4'

1
>>> lines = "line1 \n line2 \n line3 \n line2 \n line2 \n line 4" 
>>> seen = set() 
>>> answer = [] 
>>> for line in lines.splitlines(): 
...  if line not in seen: 
...    seen.add(line) 
...    answer.append(line) 
... 
>>> print '\n'.join(answer) 
line1 
line2 
line3 
line 4 
>>> '\n'.join(answer) 
'line1 \n line2 \n line3 \n line 4' 
Смежные вопросы