Python фильтрация в списке списков по частичной строке - PullRequest
0 голосов
/ 30 марта 2020

Newb ie вопрос здесь ...

У меня есть список списков, и мне нужно отфильтровать целые элементы (строки), если существует одно вхождение частичной строки в строке.

Например,

df = [['frog','womble','badger'], ['frog','ant','owl'], ['frog','badger','dataERRORdata']]

Мне нужно выполнить поиск по %ERROR% (потому что окружающий текст большой и изменяемый) и для этого удалить весь элемент, оставив;

[['frog','womble','badger'], ['frog','ant','owl']]

Я пробовал несколько списков / циклов типа генератора, но не могу заставить его работать. Было бы весьма полезно иметь пример, основанный только на вышеизложенном, чтобы я мог настроить его на конкретный c случай, который у меня есть.

Такое ощущение, что это просто, и я просто упускаю что-то простое

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Это понимание с any подойдет:

df = [['frog','womble','badger'],['frog','ant','owl'],['frog','badger','dataERRORdata']]

clean = [sub for sub in df if not any('ERROR' in w for w in sub)]
# [['frog', 'womble', 'badger'], ['frog', 'ant', 'owl']]

Это сокращение для следующих вложенных l oop ( документов на for-else ):

clean = []
for sub in df:
    for w in sub:
        if 'ERROR' in w:
            break
    else:  # loop not broken out of
        clean.append(sub)
2 голосов
/ 30 марта 2020

Вы можете использовать выражение генератора в all для проверки каждого подсписка на наличие строки, содержащей 'ERROR', используйте фильтрацию списка до l oop над этими подсписками для фильтрации.

>>> [sub for sub in df if all('ERROR' not in s for s in sub)]
[['frog', 'womble', 'badger'], ['frog', 'ant', 'owl']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...