Удаление элемента в списке если он содержит только знаки Python
Час добрый
Подскажите пожалуйста как можно из списка:
list1 = ['<p>пример фраз</p>', '<p> !@>.)(**?& </p>' ]
убрать все элементы не несущие в себе текста, а только лишь знаки.
Понимаю примерно так:
for item in list:
item = item[<p>:</p>] #обрезаем теги
if #проверка на наличие только лишь знаков
item = f'<p>{item}</p>' #собираем обратно в тег
Не знаю только как устроить данную проверку, чтобы после обработки ушли все элементы из list1 которые содержат только знаки.
А так же те элементы которые содержат только знаки и цифры ('@2131$35%^' - вроде такого)
Ответы (2 шт):
Автор решения: Александр Рассказчиков
→ Ссылка
Вы очень близки к корректному решению! Успехов в изучении программирования!
list1 = ['<p>пример фраз</p>', '<p> !@>.)(**?& </p>']
result = []
for item in list1:
item = item[3:-3] # обрезаем теги
for symbol in item: # Проходим по всем символам в строке
if symbol.isalpha(): # Если текущий символ - буква
break
else:
continue
item = f'<p>{item}</p>' # собираем обратно в тег
result.append(item) # добавляем элемент в результирующий список
list1 = result
Автор решения: SergFSM
→ Ссылка
такие штуки еще удобно делать с помощью модуля re, примерно так:
from re import fullmatch
from string import punctuation as pnt
list1 = ['<p>пример фраз!</p>', '<p> !@>.)9(**?& </p>', '<p>1 2 3 9</p>', '<p>1 2 test 3 4</p>']
res = [i for i in list1 if not fullmatch(fr'<p>[{pnt}\s0-9]*</p>',i)]
print(res) # ['<p>пример фраз!</p>', '<p>1 2 test 3 4</p>']