0

Всем привет! Мне необходимо в html-документе удалить все дубликаты строк с определенным значением, но так, чтобы первое значение в документе осталось, может кто-нибудь привести пример? В голову что-то ничего не приходит...

2 Answers2

1

Алгоритм:

elems = set()

for elem in последовательность:
   if elem in elems:
       последовательность.delete(elem)
   else:
       elems.add(elem)
Andrio Skur
  • 2,873
  • А просто set(последовательность)? А как потом html собрать из множества? – Sour Sourse Jan 23 '18 at 11:25
  • Посмотрите еще раз. Множество нужно только для того чтобы знать что данный елемент у нас уже был. А html остаеться тот же, из него просто удаляються старые елементы. – Andrio Skur Jan 23 '18 at 11:28
  • Дейсвительно, что то туплю. Извеняюсь. – Sour Sourse Jan 23 '18 at 11:33
  • Прошу прощения, не совсем понял, как данный алгоритм применить к html документу – Михаил Васильченко Jan 23 '18 at 12:00
  • Ну откуда он у вас? – Andrio Skur Jan 23 '18 at 12:51
  • Он лежит в директории с проектом – Михаил Васильченко Jan 23 '18 at 16:13
  • Ну так тогда сначала его надо спарсить. Либо спецлиба, либо просто как обычный текст(хотя не уверен насчет последнего) – Andrio Skur Jan 23 '18 at 19:59
  • я не вижу ничего ни о html ни о jinja2 в ответе.¶ Ответ как есть, не будет работать, так как обычно нельзя изменять последовательность, которую вы обходите. В чем разница между двумя циклами for: при удалении элементов во время обхода списка – jfs Jan 23 '18 at 21:05
  • @jfs Ну начнем с вопроса. В вопросе идет речь про jinja2(шаблонизатор) и он не может иметь какое либо отношение к файлу на диске(то что файл на диске взято из комментариев), и нет самодостаточного и воспроизводимого примера, там вообще ничего нет. Я не квантовый компьютер, на некорректный вопрос не могу возвратить корректный ответ, так что как есть. "так как обычно нельзя изменять последовательность," это догма. На самом деле можно менять если соблюдать некоторые условия. – Andrio Skur Jan 24 '18 at 07:54
  • Конкретно здесь последовательность это может быть быть хитрый класс маппинга html значений который вполне может поддерживать возможность корректного удаления во время итерации. – Andrio Skur Jan 24 '18 at 07:55
  • Вон ответ от "Денис" в принципе не может корректно работать на html и ничего, всем норм – Andrio Skur Jan 24 '18 at 07:57
  • если вы считаете вопрос настолько "некорректным", что на него нельзя дать "корректный" ответ, то зачем отвечать? Мне вот вопрос не ясен и я вместо ответа комментарий под вопросом оставил и проголосовал за закрытие (нельзя ответить на него в текущей форме — здесь мы с вами согласны).¶ если забыть о вопросе, у вас всё равно ответ вредный (по ссылке пройдите, чтобы понять почему не нужно удалять элементы как вы это делаете. Хитрую последовательность, которая удаляет правильно налету и с html работает в студию!). – jfs Jan 24 '18 at 08:07
0

Разбиваем ваш файл на строки:

lines = open("file.html").readlines()

Удаляем повторяющиеся, сохраняя порядок строк:

result = sorted(set(lines), key=lines.index)