Как отфильтровать элементы списка на основе того, содержат ли они подстроку из другого списка в Python - PullRequest
0 голосов
/ 05 августа 2020

У меня есть список строк, например так называемый main_list:

['Hello_Kitty [data]', 'abc_xyz [data]']

и еще один список под названием 'ids'

[abc, xyz]

Я создаю этот список, просматривая 'contents_list 'и добавление в main_list, если' data 'найдены в записи строки (contents_list), является просто списком строк.

for entry in contents_list:
    if 'data' in entry:
        main_list.append(entry)

Как я могу отфильтровать записи, чтобы ничего не добавлять в main_list, если он содержит id из 'ids' в подстроке?

Я хочу получить следующее:

['Hello_Kitty [data]']

Ответы [ 2 ]

2 голосов
/ 05 августа 2020
main_list = ['Hello_Kitty [data]', 'abc_xyz [data]']
ids = ['abc', 'xyz']

filtered_output=[]

for item in main_list:
    blocked=False
    for id in ids:
        if id in item:
            blocked=True
    if blocked == False:
        filtered_output.append(item)

Вывод:

['Hello_Kitty [data]']
0 голосов
/ 05 августа 2020

Вам нужно будет проверить каждый идентификатор, есть ли он в строке перед добавлением. Я предпочитаю использовать понимание списка.

Я использую понимание списка, чтобы создать список, содержащий все идентификаторы, содержащиеся в строке. Если длина этого списка больше 0, то эта строка не добавляется.

[id for id in ids if id in entry] будет пониманием списка. Это будет для каждого элемента идентификаторов проверять, является ли этот элемент подстрокой записи. Если да, этот идентификатор переходит в понимание списка.

Я использую условие len( [id for id in ids if id in entry] ) == 0 с другим, если для выполнения работы. Если длина равна 0, идентификатор не является подстрокой записи.

for entry in contents_list:
    if 'data' in entry:
        if len( [id for id in ids if id in entry] ) == 0:
            main_list.append(entry)
...