Удалить несколько вхождений, кроме определенных значений?
У меня есть список строк текста: textlines
который представляет собой список строк (заканчивается '\n'
).
Я хотел бы удалить множественные вхождения строк, исключая те, которые содержат только пробелы, переводы строк и табуляции.
Другими словами, если исходный список:
textlines[0] = "First line\n"
textlines[1] = "Second line \n"
textlines[2] = " \n"
textlines[3] = "First line\n"
textlines[4] = " \n"
Список вывода будет:
textlines[0] = "First line\n"
textlines[1] = "Second line \n"
textlines[2] = " \n"
textlines[3] = " \n"
Как это сделать?
3 ответа
Решение
seen = set()
res = []
for line in textlines:
if line not in seen:
res.append(line)
if not line.strip():
seen.add(line)
textlines = res
Потому что я не могу устоять перед хорошим кодом игры в гольф:
seen = set()
[x for x in textlines if (x not in seen or not x.strip()) and not seen.add(x)]
Out[29]: ['First line\n', 'Second line \n', ' \n', ' \n']
Это эквивалентно ответу @hughbothwell. Что вы должны использовать, если вы когда-нибудь захотите, чтобы люди читали ваш код:-)
new = []
for line in textlines:
if line in new and line.strip():
continue
new.append(line)
textlines = new